La compatibilité de Python 2 n'est plus assurée par la communauté. Nous vous recommandons de migrer les applications Python 2 vers Python 3.

Types et classes de propriétés

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 ou unicode

Chaîne courte (1 500 octets maximum).

Une valeur str est considérée comme du texte encodé avec le codec ascii, elle est convertie en une valeur unicode avant son stockage. La valeur est renvoyée par le magasin de données sous la forme d'une valeur unicode. Pour les chaînes courtes utilisant d'autres codecs, utilisez une valeur unicode.

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 instance Blob. 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 instance ByteString.

Propriété du modèle : StringProperty

bool

Valeur booléenne (True ou False).

Propriété du modèle : BooleanProperty

int ou long

Valeur entière, comportant jusqu'à 64 bits.

Les valeurs int Python sont converties en valeurs long Python avant leur stockage. Une valeur stockée en tant que int est renvoyée en tant que long.

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 attribut tzinfo, 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ément tzinfo de valeur None. Si les valeurs de date et d'heure d'une application doivent correspondre à un fuseau horaire particulier, l'application doit définir l'élément tzinfo 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 compris datetime.tzinfo. Consultez également le module tiers pytz, mais notez que la distribution pytz 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é dynamique Expando).

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é dynamique Expando, 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 classe ListProperty 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 valeur 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 valeur stockée user.User à la nouvelle valeur user.User, elles ne correspondront pas. Envisagez plutôt d'utiliser l'élément user_id() de la valeur user.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 instance Text 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 valeur str 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, utilisez str (court, indexé) ou Text (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 ou str. Si arg est une valeur str, il est analysé avec l'encodage spécifié par encoding ou ascii 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 ou unicode, 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, il s'agit d'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 :

ProtocoleDescription
sipSIP/SIMPLE
xmppXMPP/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
inconnuInconnu 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.

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 erreur BadValueError 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 ou False).

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 en datetime.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 valeurs long Python avant leur stockage. Une valeur stockée en tant que int est renvoyée en tant que long.

Si vous affectez une valeur long de plus de 64 bits, seuls les 64 bits les moins significatifs sont stockés.

Type de valeur : int ou long

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 être None. Toutefois, il peut s'agir d'une liste vide. Si vous indiquez None 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 classes Property, les fonctionnalités de la classe Property, 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 classe Property, vous pouvez instancier la classe de propriété et appeler sa méthode validate() 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 valeur ReferenceProperty 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 erreur ReferencePropertyResolveError.

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 ou unicode (basestring).

Type de valeur : liste (list) Python de valeurs str ou unicode

classe StringProperty(verbose_name=None, multiline=False, ...)

Chaîne courte. Utilise une valeur Python str ou unicode (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èque djangoforms 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.

Type de valeur : str ou unicode

classe TextProperty()

Chaîne longue.

Contrairement à StringProperty, une valeur TextProperty peut comporter plus de 1 500 octets. Toutefois, les valeurs TextProperty 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, utilisez BlobProperty.

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 section DateTimeProperty.

Type de valeur : datetime.time ; converti en interne en datetime.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 valeur User stockée à la nouvelle valeur User, 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