Remarque : Les développeurs qui créent des applications sont vivement encouragés à utiliser la bibliothèque cliente NDB qui présente plusieurs avantages supplémentaires par rapport à cette bibliothèque cliente, tels que la mise en cache automatique des entités via l'API Memcache. Si vous utilisez actuellement l'ancienne bibliothèque cliente DB, consultez le guide de migration de DB vers NDB.
Le datastore App Engine accepte un ensemble fixe de types de valeurs pour les propriétés des entités de données.
Les classes
Property
peuvent définir de nouveaux types convertis vers et depuis les types de valeur sous-jacents. Les types de valeur peuvent être utilisés directement avec les propriétés dynamiques
Expando
et les modèles de propriétés d'agrégation
ListProperty
.
Le tableau ci-dessous décrit les classes Property dont les valeurs correspondent directement aux types de données sous-jacents. Tous ces types de valeurs sont utilisables dans une propriété dynamique Expando ou un type d'agrégation ListProperty.
Classe Property | Type de valeur | Ordre de tri |
---|---|---|
IntegerProperty
|
int
long
(64 bits) |
Numérique |
FloatProperty
|
float
|
Numérique |
BooleanProperty
|
bool
|
False < True |
StringProperty
|
str
unicode
|
Unicode (str est traité comme du code ASCII) |
TextProperty
|
db.Text
|
Aucun |
ByteStringProperty
|
ByteString
|
Ordre des octets |
BlobProperty
|
db.Blob
|
Aucun |
DateProperty
TimeProperty
DateTimeProperty
|
datetime.date
datetime.time
datetime.datetime
|
Chronologique |
GeoPtProperty
|
db.GeoPt
|
En fonction de la latitude, puis de la longitude |
PostalAddressProperty
|
db.PostalAddress
|
Unicode |
PhoneNumberProperty
|
db.PhoneNumber
|
Unicode |
EmailProperty
|
db.Email
|
Unicode |
UserProperty
|
users.User
|
Adresse e-mail dans l'ordre Unicode Notez qu'il convient d'éviter d'utiliser UserProperty comme indiqué dans la note de la description de la classe UserProperty. |
IMProperty
|
db.IM
|
Unicode |
LinkProperty
|
db.Link
|
Unicode |
CategoryProperty
|
db.Category
|
Unicode |
RatingProperty
|
db.Rating
|
Numérique |
ReferenceProperty
SelfReferenceProperty
|
db.Key
|
Par éléments de chemin d'accès (genre, identifiant, genre, identifiant, etc.) |
blobstore.BlobReferenceProperty
|
blobstore.BlobInfo
|
Ordre des octets |
ListProperty
StringListProperty
|
list
d'un type compatible |
Par ordre croissant, en fonction de l'élément le plus petit ; par ordre décroissant, en fonction de l'élément le plus grand. |
Types de valeurs du datastore
Cette partie décrit les types de valeurs disponibles pour les propriétés d'entités de datastore. Pour obtenir la liste des classes Property
correspondantes à utiliser avec les définitions Model
, consultez la section ci-dessus.
À l'exception des types Python standards et users.User
, toutes les classes décrites dans cette section sont fournies par le module google.appengine.ext.db
.
str
ouunicode
-
Chaîne courte (1 500 octets maximum).
Une valeur
str
est considérée comme du texte encodé avec le codecascii
, elle est convertie en une valeurunicode
avant son stockage. La valeur est renvoyée par le magasin de données sous la forme d'une valeurunicode
. Pour les chaînes courtes utilisant d'autres codecs, utilisez une valeurunicode
.Les chaînes courtes sont indexées par le datastore, et peuvent servir dans les filtres et les ordres de tri. Pour les chaînes de texte de plus de 1 500 octets (non indexées), utilisez une instance
Text
. Pour les chaînes d'octets non codées de plus de 1 500 octets (également non indexées), utilisez une instanceBlob
. Pour les chaînes d'octets non codées non textuelles, pouvant contenir jusqu'à 1 500 octets (autres que des caractères) et qui doivent être indexées, utilisez une instanceByteString
.Propriété du modèle :
StringProperty
bool
-
Valeur booléenne (
True
ouFalse
).Propriété du modèle :
BooleanProperty
int
oulong
-
Valeur entière, comportant jusqu'à 64 bits.
Les valeurs
int
Python sont converties en valeurslong
Python avant leur stockage. Une valeur stockée en tant queint
est renvoyée en tant quelong
.Si vous affectez une valeur
long
de plus de 64 bits, seuls les 64 bits les moins significatifs sont stockés.Propriété du modèle :
IntegerProperty
float
-
Nombre à virgule flottante.
Propriété du modèle :
FloatProperty
datetime.datetime
-
Date et heure. Consultez la documentation du module
datetime
.Si la valeur
datetime
possède un attributtzinfo
, elle est convertie au format de fuseau horaire UTC avant le stockage. Le magasin de données renvoie les valeurs au format UTC, avec un élémenttzinfo
de valeurNone
. Si les valeurs de date et d'heure d'une application doivent correspondre à un fuseau horaire particulier, l'application doit définir l'élémenttzinfo
de manière appropriée lors de la mise à jour de la valeur, et convertir les valeurs en fonction du fuseau horaire lors de l'accès à la valeur.Certaines bibliothèques utilisent la variable d'environnement
TZ
pour contrôler le fuseau horaire appliqué aux valeurs date-heure. App Engine définit la variable d'environnement sur"UTC"
. Notez que lorsque vous modifiez cette variable dans une application, le comportement de certaines fonctions d'horodatage reste inchangé, car les modifications apportées aux variables d'environnement ne sont pas visibles en dehors du code Python.Si vous convertissez les valeurs uniquement vers/depuis un fuseau horaire particulier, vous pouvez implémenter un
datetime.tzinfo
personnalisé pour convertir les valeurs à partir du datastore :import datetime import time class Pacific_tzinfo(datetime.tzinfo): """Implementation of the Pacific timezone.""" def utcoffset(self, dt): return datetime.timedelta(hours=-8) + self.dst(dt) def _FirstSunday(self, dt): """First Sunday on or after dt.""" return dt + datetime.timedelta(days=(6-dt.weekday())) def dst(self, dt): # 2 am on the second Sunday in March dst_start = self._FirstSunday(datetime.datetime(dt.year, 3, 8, 2)) # 1 am on the first Sunday in November dst_end = self._FirstSunday(datetime.datetime(dt.year, 11, 1, 1)) if dst_start <= dt.replace(tzinfo=None) < dst_end: return datetime.timedelta(hours=1) else: return datetime.timedelta(hours=0) def tzname(self, dt): if self.dst(dt) == datetime.timedelta(hours=0): return "PST" else: return "PDT" pacific_time = datetime.datetime.fromtimestamp(time.mktime(utc_time.timetuple()), Pacific_tzinfo())
Consultez la documentation du module
datetime
, y comprisdatetime.tzinfo
. Consultez également le module tierspytz
, mais notez que la distributionpytz
comporte de nombreux fichiers.La classe de propriété de modèle
DateTimeProperty
inclut des fonctionnalités telles que la possibilité d'utiliser automatiquement la date et l'heure de stockage d'une instance de modèle. Il s'agit de fonctionnalités du modèle qui ne sont pas disponibles sur la valeur brute du datastore (comme dans une propriété dynamiqueExpando
).Propriétés du modèle :
DateTimeProperty
,DateProperty
,TimeProperty
list
-
Liste de valeurs, dont chacune correspond à l'un des types de données reconnus.
Lorsqu'une valeur
list
est utilisée comme valeur d'une propriété dynamiqueExpando
, elle ne peut pas être vide. Cela s'explique par le processus de stockage des valeurs de type liste : une propriété de liste qui ne contient pas d'éléments n'est pas représentée dans le datastore. Vous pouvez utiliser une propriété statique et la classeListProperty
pour représenter une valeur de liste vide pour une propriété.Propriété du modèle :
ListProperty
-
db.Key
-
Clé d'une autre entité de datastore.
Remarque : Les chaînes de clés sont limitées à 1 500 octets maximum.
m = Employee(name="Susan", key_name="susan5") m.put() e = Employee(name="Bob", manager=m.key()) e.put() m_key = db.Key.from_path("Employee", "susan5") e = Employee(name="Jennifer", manager=m_key)
Propriétés du modèle :
ReferenceProperty
,SelfReferenceProperty
-
blobstore.BlobKey
-
Clé d'une valeur Blobstore, générée par le service Blobstore lors du transfert de la valeur.
Propriétés du modèle :
blobstore.BlobReferenceProperty
-
users.User
-
Utilisateur disposant d'un compte Google.
Une valeur
user.User
dans le datastore n'est pas mise à jour si l'utilisateur change d'adresse e-mail. Pour cette raison, nous vous recommandons vivement d'éviter de stocker une propriétéusers.User
en tant que valeurUserProperty
, car elle contient l'adresse e-mail et l'ID unique de l'utilisateur. Si un utilisateur change d'adresse e-mail et que vous comparez l'ancienne valeur stockéeuser.User
à la nouvelle valeuruser.User
, elles ne correspondront pas. Envisagez plutôt d'utiliser l'élémentuser_id()
de la valeuruser.User
comme identifiant unique stable de l'utilisateur.Propriété du modèle :
UserProperty
- classe Blob(arg=None)
-
Données binaires, sous la forme d'une chaîne d'octets. Il s'agit d'une sous-classe du type intégré
str
.Les propriétés blob ne sont pas indexées et ne peuvent pas servir dans les filtres ou les ordres de tri.
Un objet blob convient pour des données binaires, telles que des images. Il utilise une valeur
str
, mais celle-ci est stockée sous la forme d'une chaîne d'octets et n'est pas encodée sous forme de texte. Utilisez une instanceText
pour les données textuelles volumineuses.Propriété du modèle :
BlobProperty
class MyModel(db.Model): blob = db.BlobProperty() m = MyModel() m.blob = db.Blob(open("image.png", "rb").read())
En XML, les objets blob sont encodés en base-64, qu'ils contiennent ou non des données binaires.
- classe ByteString(arg)
-
Valeur blob courte ("chaîne d'octets") de 1 500 octets maximum. La classe "ByteString", sous-classe de
str
, utilise une valeurstr
non codée comme argument pour son constructeur.Les valeurs ByteString sont indexées par le datastore, et peuvent servir dans les filtres et les ordres de tri. Pour les chaînes d'octets de plus de 1 500 octets (non indexées), utilisez une instance
Blob
. Pour les données de type texte encodées, utilisezstr
(court, indexé) ouText
(long, non indexé).Propriété du modèle :
ByteStringProperty
- classe Text(arg=None, encoding=None)
-
Chaîne longue. Il s'agit d'une sous-classe du type
unicode
intégré.arg peut être une valeur
unicode
oustr
. Si arg est une valeurstr
, il est analysé avec l'encodage spécifié par encoding ouascii
si aucun encodage n'est spécifié. Pour connaître les valeurs possibles pour encoding, consultez la liste des encodages standards.Contrairement à une propriété d'entité dont la valeur est une simple valeur
str
ouunicode
, une propriété Text peut comporter plus de 1 500 octets. Toutefois, les propriétés Text ne sont pas indexées, et ne peuvent pas servir dans les filtres et les ordres de tri.Propriété du modèle :
TextProperty
class MyModel(db.Model): text = db.TextProperty() m = MyModel() m.text = db.Text(u"kittens") m.text = db.Text("kittens", encoding="latin-1")
- classe Category(tag)
-
Catégorie ou "tag". Il s'agit d'une sous-classe du type
unicode
intégré.Propriété du modèle :
CategoryProperty
class MyModel(db.Model): category = db.CategoryProperty() m = MyModel() m.category = db.Category("kittens")
En XML, il s'agit d'un élément Atom
Category
. - classe Email(email)
-
Adresse e-mail Il s'agit d'une sous-classe du type
unicode
intégré.La classe Property et la classe Value n'effectuent aucune validation des adresses e-mail, elles stockent simplement la valeur.
Propriété du modèle :
EmailProperty
class MyModel(db.Model): email_address = db.EmailProperty() m = MyModel() m.email_address = db.Email("larry@example.com")
En XML, il s'agit d'un élément
gd:email
. - classe GeoPt(lat, lon=None)
-
Point géographique représenté par des coordonnées de latitude et de longitude à virgule flottante.
Propriété du modèle :
GeoPtProperty
En XML, cela correspond à un élément
georss:point
. - classe IM(protocole, address=None)
-
Identificateur de messagerie instantanée.
La valeur protocol est l'URL canonique du service de messagerie instantanée. Exemples de valeurs possibles :
Protocole Description sip SIP/SIMPLE xmpp XMPP/Jabber http://aim.com/ AIM http://icq.com/ ICQ http://messenger.msn.com/ MSN Messenger http://messenger.yahoo.com/ Yahoo Messenger http://sametime.com/ Lotus Sametime http://gadu-gadu.pl/ Gadu-Gadu inconnu Inconnu ou non spécifié La valeur address est l'adresse de l'identificateur.
Propriété du modèle :
IMProperty
class MyModel(db.Model): im = db.IMProperty() m = MyModel() m.im = db.IM("http://example.com/", "Larry97")
En XML, il s'agit d'un élément
gd:im
. - classe Link(link)
-
URL complète. Il s'agit d'une sous-classe du type
unicode
intégré.Propriété du modèle :
LinkProperty
class MyModel(db.Model): link = db.LinkProperty() m = MyModel() m.link = db.Link("http://www.google.com/")
En XML, il s'agit d'un élément Atom
Link
. - classe PhoneNumber(phone)
-
Numéro de téléphone intelligible. Il s'agit d'une sous-classe du type
unicode
intégré.Propriété du modèle :
PhoneNumberProperty
class MyModel(db.Model): phone = db.PhoneNumberProperty() m = MyModel() m.phone = db.PhoneNumber("1 (206) 555-1212")
En XML, il s'agit d'un élément
gd.phoneNumber
. - classe PostalAddress(address)
-
Adresse postale. Il s'agit d'une sous-classe du type
unicode
intégré.Propriété du modèle :
PostalAddressProperty
class MyModel(db.Model): address = db.PostalAddressProperty() m = MyModel() m.address = db.PostalAddress("1600 Ampitheater Pkwy., Mountain View, CA")
En XML, il s'agit d'un élément
gd:postalAddress
. - classe Rating(rating)
-
Note fournie par l'utilisateur pour un contenu, sous la forme d'un entier entre 0 et 100. Il s'agit d'une sous-classe du type
long
intégré. La classe s'assure que la valeur est un entier compris entre 0 et 100, et génère une erreurBadValueError
si la valeur n'est pas valide.Propriété du modèle :
RatingProperty
class MyModel(db.Model): rating = db.RatingProperty() m = MyModel() m.rating = db.Rating(97)
En XML, il s'agit d'un élément
gd:rating
.
Classes de propriétés
Toutes les classes de propriétés de modèle fournies par google.appengine.ext.db
sont des sous-classes de la classe de base Property
et sont compatibles avec tous les arguments du constructeur de base. Pour plus d'informations sur ces arguments, consultez la documentation sur la classe de base.
Le package google.appengine.ext.db
fournit les classes de propriétés de modèle suivantes :
- classe BlobProperty(...)
-
Collection non interprétée de données binaires.
Les données blob correspondent à une chaîne d'octets. Pour les données de type texte qui peuvent impliquer un encodage, utilisez
TextProperty
.Type de valeur :
Blob
- classe BooleanProperty(...)
-
Valeur booléenne (
True
ouFalse
).Type de valeur :
bool
- classe ByteStringProperty(verbose_name=None, ...)
-
Valeur blob courte ("chaîne d'octets") de 1 500 octets maximum.
Les valeurs
ByteStringProperty
sont indexées et peuvent être utilisées dans les filtres et les ordres de tri.Cette valeur est semblable à
StringProperty
, sauf qu'elle n'est pas encodée. Les octets sont stockés de façon littérale.Si la propriété
ByteStringProperty
est requise, la valeur ne peut pas être une chaîne vide.Type de valeur :
ByteString
- classe CategoryProperty(...)
-
Catégorie ou "tag" (phrase ou mot descriptif).
Type de valeur :
Category
- classe DateProperty(verbose_name=None, auto_now=False, auto_now_add=False, ...)
-
Date sans heure du jour (consultez la page
DateTimeProperty
pour en savoir plus).Type de valeur :
datetime.date
; converti en interne endatetime.datetime
- classe DateTimeProperty(verbose_name=None, auto_now=False, auto_now_add=False, ...)
-
Date et heure.
Si auto_now est défini sur
True
, la valeur de la propriété est définie sur l'heure actuelle chaque fois que l'instance de modèle est stockée dans le datastore, et remplace la valeur précédente. Cet argument est utile pour suivre la date et l'heure de dernière modification d'une instance de modèle.Si auto_now_add est défini sur
True
, la valeur de la propriété est définie sur l'heure actuelle lors du premier stockage de l'instance de modèle dans le datastore, sauf si une valeur lui a déjà été attribuée. Cet argument est utile pour stocker la date et l'heure de création d'une instance de modèle.Les valeurs date-heure sont stockées au format de fuseau horaire UTC et renvoyées en utilisant ce même fuseau horaire. Consultez la section
datetime.datetime
pour en savoir plus sur la gestion des fuseaux horaires.Type de valeur :
datetime.datetime
- classe EmailProperty(...)
-
Adresse e-mail
La classe Property et la classe Value n'effectuent aucune validation des adresses e-mail, elles stockent simplement la valeur.
Type de valeur :
Email
- classe FloatProperty(...)
-
Nombre à virgule flottante.
Type de valeur :
float
- classe GeoPtProperty(...)
-
Point géographique représenté par des coordonnées de latitude et de longitude à virgule flottante.
Type de valeur :
GeoPt
- classe IMProperty(...)
-
Identificateur de messagerie instantanée.
Type de valeur :
IM
- classe IntegerProperty(...)
-
Valeur entière, comportant jusqu'à 64 bits.
Les valeurs
int
Python sont converties en valeurslong
Python avant leur stockage. Une valeur stockée en tant queint
est renvoyée en tant quelong
.Si vous affectez une valeur
long
de plus de 64 bits, seuls les 64 bits les moins significatifs sont stockés. - classe LinkProperty(...)
-
URL complète.
Type de valeur :
Link
- classe ListProperty(item_type, verbose_name=None, default=None, ...)
-
Liste de valeurs du type spécifié par item_type.
Dans une requête, la comparaison d'une propriété de liste et d'une valeur effectue le test sur les membres de la liste :
list_property
=
value
vérifie si la valeur apparaît n'importe où dans la liste,list_property
<
value
vérifie si l'un des membres de la liste est inférieur à la valeur donnée, etc.Une requête ne peut pas comparer deux valeurs de type liste. Il n'existe aucun moyen de vérifier l'égalité de deux listes sans tester séparément chaque élément pour vérifier leur appartenance aux deux listes.
L'argument item_type représente le type des éléments de la liste, sous la forme d'un type ou d'une classe Python. Tous les éléments de la liste doivent être du type donné. item_type doit être l'un des types de valeurs du datastore et ne peut pas être
list
.La valeur de
ListProperty
ne peut pas êtreNone
. Toutefois, il peut s'agir d'une liste vide. Si vous indiquezNone
pour l'argument default (ou si l'argument default n'est pas précisé), la valeur par défaut de la propriété est une liste vide.Conseil : Dans la mesure où les types d'agrégation
ListProperty
n'utilisent pas les classesProperty
, les fonctionnalités de la classeProperty
, telles que les valeurs automatiques et la validation, ne s'appliquent pas automatiquement aux membres de la valeur de type "list". Si vous souhaitez valider une valeur de membre à l'aide d'une classeProperty
, vous pouvez instancier la classe de propriété et appeler sa méthodevalidate()
sur la valeur.L'argument default est la valeur par défaut de la propriété de liste. Si vous indiquez
None
, la valeur par défaut est une liste vide. Une propriété de liste peut définir un outil de validation personnalisé pour interdire la liste vide.Consultez la page Modélisation des données pour en savoir plus sur les propriétés et les valeurs de la liste.
Type de valeur : liste (
list
) Python de valeurs du type spécifié - classe PhoneNumberProperty(...)
-
Numéro de téléphone intelligible.
Type de valeur :
PhoneNumber
- classe PostalAddressProperty(...)
-
Adresse postale.
Type de valeur :
PostalAddress
- classe RatingProperty()
-
Note fournie par l'utilisateur pour un contenu, sous la forme d'un entier entre 0 et 100.
Type de valeur :
Rating
- classe ReferenceProperty(reference_class=None, verbose_name=None, collection_name=None, ...)
-
Référence à une autre instance de modèle. Par exemple, une référence peut indiquer une relation plusieurs-à-un entre le modèle comportant la propriété et le modèle référencé par la propriété.
L'argument reference_class est la classe de modèle de l'instance de modèle référencée. Si vous indiquez une classe, seules des instances de modèle de cette classe peuvent être affectées à cette propriété. Si vous indiquez
None
, cette propriété peut prendre comme valeur n'importe quelle instance de modèle.L'argument collection_name est le nom de la propriété à attribuer à la classe de modèle référencée. La valeur de la propriété est une requête (
Query
) pour toutes les entités qui référencent l'entité. Si aucune valeur collection_name n'est définie,modelname_set
est utilisé (avec le nom du modèle référencé en minuscules, auquel est ajouté le suffixe_set
).Remarque : collection_name doit obligatoirement être défini si plusieurs propriétés au sein d'un même modèle font référence à la même classe de modèle. Sinon, une erreur
DuplicatePropertyError
est générée lors de la génération des noms par défaut.La classe
ReferenceProperty
référence et déréférence automatiquement les instances de modèle en tant que valeurs de propriétés : lorsqu'une instance de modèle est affectée directement à une propriété ReferenceProperty, sa clé est utilisée comme valeur. Si vous utilisez la valeurReferenceProperty
comme s'il s'agissait d'une instance de modèle, l'entité de datastore est récupérée et l'instance de modèle est créée lorsque vous l'utilisez pour la première fois de cette manière. Les propriétés de référence non touchées n'effectuent pas de requête sur des données inutiles.class Author(db.Model): name = db.StringProperty() class Story(db.Model): author = db.ReferenceProperty(Author) story = db.get(story_key) author_name = story.author.name author = db.get(author_key) stories_by_author = author.story_set.get()
Comme pour une valeur
Key
, une valeur de propriété de référence peut faire référence à une entité de données qui n'existe pas. Lorsqu'une entité référencée est supprimée du datastore, les références à cette entité ne sont pas mises à jour. L'accès à une entité qui n'existe pas génère une erreurReferencePropertyResolveError
.La suppression d'une entité ne supprime pas les entités désignées par une propriété de référence.
Type de valeur :
db.Key
- classe SelfReferenceProperty(verbose_name=None, collection_name=None, …)
-
Référence à une autre instance de modèle de la même classe (voir
ReferenceProperty
).Type de valeur :
db.Key
- classe StringListProperty(verbose_name=None, default=None, ...)
-
Semblable à une propriété de liste de valeurs Python
str
ouunicode
(basestring
).Type de valeur : liste (
list
) Python de valeursstr
ouunicode
- classe StringProperty(verbose_name=None, multiline=False, ...)
-
Chaîne courte. Utilise une valeur Python
str
ouunicode
(basestring
) de 1 500 octets au maximum.Les valeurs
StringProperty
sont indexées et peuvent être utilisées dans les filtres et les ordres de tri.Si multiline est défini sur
False
, la valeur ne peut pas inclure de caractères de saut de ligne. La bibliothèquedjangoforms
l'utilise pour appliquer une distinction entre les champs de texte et les champs de zone de texte dans le modèle de données. D'autres bibliothèques peuvent l'utiliser à des fins similaires.Si la propriété de chaîne est requise, sa valeur ne peut pas être une chaîne vide.
- classe TextProperty()
-
Chaîne longue.
Contrairement à
StringProperty
, une valeurTextProperty
peut comporter plus de 1 500 octets. Toutefois, les valeursTextProperty
ne sont pas indexées, et ne peuvent pas être utilisées dans les filtres ou les ordres de tri.Les valeurs
TextProperty
stockent le texte avec un encodage de texte. Pour les données binaires, utilisezBlobProperty
.Si la propriété de texte est requise, sa valeur ne peut pas être une chaîne vide.
Type de valeur :
Text
- classe TimeProperty(verbose_name=None, auto_now=False, auto_now_add=False, ...)
-
Heure du jour sans date. Utilise une valeur
datetime.time
de la bibliothèque standard Python. Pour en savoir plus, consultez la sectionDateTimeProperty
.Type de valeur :
datetime.time
; converti en interne endatetime.datetime
- classe UserProperty(verbose_name=None, auto_current_user=False, auto_current_user_add=False, ...)
-
Important : Nous vous recommandons vivement d'éviter de stocker une propriété
UserProperty
, car elle contient l'adresse e-mail et l'ID unique de l'utilisateur. Si un utilisateur change d'adresse e-mail et que vous comparez l'ancienne valeurUser
stockée à la nouvelle valeurUser
, elles ne correspondront pas.Utilisateur disposant d'un compte Google.
Si auto_current_user est défini sur
True
, la valeur de la propriété est définie sur l'utilisateur actuellement connecté chaque fois que l'instance de modèle est stockée dans le datastore, en remplaçant la valeur précédente. Cet argument est très utile pour savoir quel utilisateur modifie une instance de modèle.Si auto_current_user_add est défini sur
True
, la valeur de la propriété est définie sur l'utilisateur actuellement connecté lors du premier stockage de l'instance de modèle dans le datastore, sauf si une valeur lui a déjà été attribuée. Cet argument est très utile pour savoir quel utilisateur crée une instance de modèle, lorsque celui-ci peut être différent de l'utilisateur qui la modifie ultérieurement.La propriété UserProperty n'accepte pas de valeur par défaut. Les valeurs par défaut sont définies lors de la première importation du modèle et sont susceptibles de ne pas correspondre à l'utilisateur actuellement connecté du fait de la mise en cache des importations.
Type de valeur :
users.User