Classe Property
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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.
La classe Property est la super-classe des définitions de propriétés pour les modèles de données. Une classe Property définit le type de valeur d'une propriété, le mode de validation des valeurs et leur mode de stockage dans le datastore.
La classe Property
est fournie par le module google.appengine.ext.db
.
Présentation
Une classe de propriété décrit le type de valeur, la valeur par défaut, la logique de validation et d'autres fonctionnalités d'une propriété d'un modèle. Chaque classe de propriété est une sous-classe de la classe Property. L'API Datastore comprend des classes de propriétés pour chacun des types de valeurs du datastore, et plusieurs autres qui fournissent des fonctionnalités supplémentaires s'ajoutant aux types du datastore. Consultez la page Types et classes de propriétés.
Une classe de propriété peut accepter la configuration à partir d'arguments transmis au constructeur. Le constructeur de classe de base prend en charge plusieurs arguments généralement acceptés dans toutes les classes de propriétés, y compris toutes celles fournies dans l'API Datastore. Cette configuration peut inclure une valeur par défaut, qu'une valeur explicite soit requise ou non, une liste de valeurs acceptables et une logique de validation personnalisée. Pour plus d'informations sur la configuration de la propriété, consultez la documentation concernant un type de propriété spécifique.
Une classe de propriété définit le modèle d'une propriété de datastore. Elle ne contient pas la valeur de la propriété pour une instance de modèle. Les instances de la classe Property appartiennent à la classe Model, et non à des instances de la classe. En langage Python, les instances d'une classe de propriété sont des "descripteurs" permettant de personnaliser le comportement des attributs des instances de modèle. Pour plus d'informations sur les descripteurs, consultez la documentation Python.
Constructeur
Le constructeur de la classe de base Property est défini comme suit :
- class Property(verbose_name=None, name=None, default=None, required=False, validator=None, choices=None, indexed=True)
-
Super-classe des définitions de propriétés de modèle.
Arguments
- verbose_name
- Nom convivial de la propriété. Il doit toujours correspondre au premier argument d'un constructeur de propriété. La bibliothèque
djangoforms
se sert de cet argument pour fabriquer des libellés pour les champs de formulaire, et d'autres outils ou services peuvent l'utiliser à des fins similaires.
- name
- Nom de stockage de la propriété, utilisé dans les requêtes. La valeur par défaut est le nom d'attribut utilisé pour la propriété. Dans la mesure où les classes Model possèdent des attributs autres que des propriétés (qui ne sont pas utilisables pour les propriétés), une propriété peut se servir de l'argument name pour utiliser un nom d'attribut réservé comme nom de la propriété dans le datastore et un nom différent pour l'attribut de propriété. Pour en savoir plus, consultez la section Noms de propriétés interdits.
- default
-
Valeur par défaut de la propriété. Si la valeur de la propriété n'est jamais indiquée, ou si la valeur indiquée est None
, la valeur prise en compte est la valeur par défaut.
Remarque : Les définitions de classes Model sont mises en cache avec le reste du code de l'application. Cela inclut la mise en cache des valeurs par défaut des propriétés. Ne définissez pas d'argument default dans la définition du modèle avec des données propres à la requête (telles que users.get_current_user()
). À la place, définissez une méthode __init__()
pour la classe Model qui initialise les valeurs de la propriété.
- obligatoire
-
Si l'argument est défini sur True
, la propriété ne peut pas prendre la valeur None
. Une instance de modèle doit initialiser toutes les propriétés obligatoires dans son constructeur, pour éviter que l'instance ne soit créée avec des valeurs manquantes. Si vous tentez de créer une instance sans initialiser une propriété requise, ou si vous essayez d'attribuer la valeur None
à une propriété requise, cela génère une erreur BadValueError.
Une propriété requise qui possède une valeur par défaut utilise celle-ci si aucune valeur n'est indiquée dans le constructeur. Toutefois, la propriété ne peut pas prendre la valeur None
, et il n'existe aucun moyen de restaurer automatiquement la valeur par défaut un fois qu'une autre valeur a été affectée. Vous pouvez toujours accéder à l'attribut default
de la propriété pour obtenir la valeur par défaut et l'affecter de manière explicite.
- validator
- Fonction qui doit être appelée pour valider la valeur de la propriété lors de l'attribution de cette valeur. La fonction utilise la valeur comme argument unique et génère une exception si la valeur est incorrecte. Le validateur donné est appelé après l'exécution d'autres validations, notamment celle consistant à vérifier qu'une propriété requise a bien une valeur. Lorsqu'aucune valeur n'est attribuée à une propriété non requise, le validateur est appelé avec l'argument
None
.
- choices
- Liste de valeurs acceptables pour la propriété. Si cette liste est définie, la propriété ne peut pas prendre une valeur qui ne figure pas dans la liste. Comme pour l'argument required et d'autres validations, une instance de modèle doit initialiser toutes les propriétés avec "choices" pour éviter que l'instance ne soit créée avec des valeurs non valides. Si l'argument choices est défini sur
None
, toutes les valeurs qui seraient sinon validées sont acceptables.
- indexed
-
Indique si cette propriété doit être incluse dans les index intégrés et définis par le développeur. Si la valeur est False
, les entités écrites dans le datastore ne sont jamais renvoyées par des requêtes qui effectuent un tri ou un filtrage sur cette propriété, semblable aux propriétés Blob et Text.
Remarque : Chaque propriété indexée entraîne une légère augmentation de la surcharge, du coût du processeur, et de la latence pour les appels put()
et delete()
. Si vous êtes sûr de ne jamais avoir besoin de filtrer ou de trier à partir d'une propriété, nous vous recommandons d'utiliser indexed=False
pour éviter cette charge. Soyez toutefois vigilant ! Si vous décidez ultérieurement d'indexer tout même la propriété, la modification sur indexed=True
n'affectera que les écritures postérieures à ce changement de configuration. Les entités écrites initialement avec l'argument défini sur indexed=False
ne seront pas réindexées.
Attributs de classe
Les sous-classes de la classe Property définissent l'attribut de classe suivant :
data_type
- Type ou classe de données Python que la propriété accepte en tant que valeur native Python.
Méthodes des instances
Les méthodes des instances des classes Property sont les suivantes :
- default_value()
-
Renvoie la valeur par défaut de la propriété. La mise en œuvre de base utilise la valeur de l'argument default transmis au constructeur. Une classe de propriété peut remplacer cette valeur pour fournir un comportement spécial de valeur par défaut, tel que la fonctionnalité de définition automatique sur la date actuelle de DateTimeProperty.
- validate(value)
-
Routine de validation complète de la propriété. Si la valeur indiquée pour l'élément value est valide, la méthode renvoie la valeur soit inchangée, soit adaptée au type requis. Sinon, elle génère une exception appropriée.
L'implémentation de base vérifie que l'argument value n'est pas défini sur None
si la valeur est requise (argument required transmis au constructeur de base Property), que la valeur correspond à l'un des choix corrects si vous avez configuré la propriété avec des choix (argument choices), et que la valeur passe le validateur personnalisé le cas échéant (argument validator).
La routine de validation est appelée lors de l'instanciation d'un modèle utilisant le type de propriété (avec les valeurs par défaut ou initialisées), et lors de l'affectation d'une valeur à une propriété de ce type. La routine ne doit pas avoir d'effets secondaires.
- empty(value)
-
Renvoie la valeur True
si l'argument value est considéré comme une valeur vide pour ce type de propriété. L'implémentation de base équivalente à not value
suffit pour la plupart des types. D'autres types, par exemple un type booléen, peuvent remplacer cette méthode par un test plus approprié.
- get_value_for_datastore(model_instance)
-
Renvoie la valeur à stocker dans le datastore pour cette propriété de l'instance de modèle donnée. L'implémentation de base renvoie simplement la valeur native Python de la propriété dans l'instance de modèle. Une classe Property peut remplacer cette méthode si vous souhaitez utiliser un type de données différent pour le datastore et pour l'instance de modèle, respectivement, ou pour effectuer une autre conversion de données juste avant le stockage de l'instance de modèle.
- make_value_from_datastore(value)
-
Renvoie la représentation native Python de la valeur donnée issue du datastore. L'implémentation de base renvoie simplement la valeur. Une classe Property peut remplacer cette méthode si vous souhaitez utiliser un type de données différent pour l'instance de modèle et pour le datastore, respectivement.
- make_value_from_datastore_index_value(value)
-
Renvoie la représentation native Python de la valeur donnée issue de l'index du datastore. L'implémentation de base renvoie simplement la valeur. Une classe Property peut remplacer cette méthode si vous souhaitez utiliser un type de données différent pour l'instance de modèle et pour le datastore, respectivement.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/09/04 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Difficile à comprendre","hardToUnderstand","thumb-down"],["Informations ou exemple de code incorrects","incorrectInformationOrSampleCode","thumb-down"],["Il n'y a pas l'information/les exemples dont j'ai besoin","missingTheInformationSamplesINeed","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/09/04 (UTC)."],[[["\u003cp\u003eDevelopers should utilize the NDB Client Library for new applications due to its advantages, such as automatic entity caching.\u003c/p\u003e\n"],["\u003cp\u003eThe Property class, found in \u003ccode\u003egoogle.appengine.ext.db\u003c/code\u003e, serves as the foundation for defining data model properties, including their type, validation, and storage method.\u003c/p\u003e\n"],["\u003cp\u003eA Property class instance is a descriptor within a Model class, dictating the behavior of Model instance attributes but not storing the property's value for each specific model.\u003c/p\u003e\n"],["\u003cp\u003eThe Property class constructor allows for configuring properties with settings like default values, requirement status, validation rules, acceptable choices, and whether they are indexed for queries.\u003c/p\u003e\n"],["\u003cp\u003eProperty class instances offer methods such as \u003ccode\u003evalidate()\u003c/code\u003e, \u003ccode\u003eempty()\u003c/code\u003e, \u003ccode\u003eget_value_for_datastore()\u003c/code\u003e, and more, which define how values are handled, validated, and stored in the datastore.\u003c/p\u003e\n"]]],[],null,["# The Property Class\n\n**Note:**\nDevelopers building new applications are **strongly encouraged** to use the\n[NDB Client Library](/appengine/docs/legacy/standard/python/ndb), which has several benefits\ncompared to this client library, such as automatic entity caching via the Memcache\nAPI. If you are currently using the older DB Client Library, read the\n[DB to NDB Migration Guide](/appengine/docs/legacy/standard/python/ndb/db_to_ndb)\n\nThe Property class is the superclass of property definitions for data models. A Property class defines the type of a property's value, how values are validated, and how values are stored in the datastore.\n\n`Property` is provided by the `google.appengine.ext.db` module.\n\nIntroduction\n------------\n\nA property class describes the value type, default value, validation logic and other features of a property of a [Model](/appengine/docs/legacy/standard/python/datastore/modelclass). Each property class is a subclass of the Property class. The datastore API includes property classes for each of the datastore value types, and several others that provide additional features on top of the datastore types. See [Types and Property Classes](/appengine/docs/legacy/standard/python/datastore/typesandpropertyclasses).\n\nA property class can accept configuration from arguments passed to the constructor. The base class constructor supports several arguments that are typically supported in all property classes, including all those provided in the datastore API. Such configuration can include a default value, whether or not an explicit value is required, a list of acceptable values, and custom validation logic. See the documentation for a specific property type for more information on configuring the property.\n\n\nA property class defines the model for a datastore property. It does not contain the property value for a model instance. Instances of the Property class belong to the Model class, not instances of the class. In Python terms, property class instances are \"descriptors\" that customize how attributes of Model instances behave. See [the Python documentation](http://docs.python.org/2/reference/datamodel.html#customizing-attribute-access) for more information about descriptors.\n\nConstructor\n-----------\n\nThe constructor of the Property base class is defined as follows:\n\nclass Property(verbose_name=None, name=None, default=None, required=False, validator=None, choices=None, indexed=True)\n\n: The superclass of model property definitions.\n\n Arguments\n\n verbose_name\n : A user-friendly name of the property. This must always be the first argument to a property constructor. The `djangoforms` library uses this to make labels for form fields, and others can use it for a similar purpose.\n\n name\n : The storage name for the property, used in queries. This defaults to the attribute name used for the property. Because model classes have attributes other than properties (which cannot be used for properties), a property can use name to use a reserved attribute name as the property name in the datastore, and use a different name for the property attribute. See [Disallowed Property Names](/appengine/docs/legacy/standard/python/datastore/modelclass#Disallowed_Property_Names) for more information.\n\n default\n\n : A default value for the property. If the property value is never given a value, or is given a value of `None`, then the value is considered to be the default value.\n\n **Note:** Model class definitions are cached along with the rest of the application code. This includes caching default values for properties. Do not set a default in the model definition with data specific to the request (such as [users.get_current_user()](/appengine/docs/legacy/standard/python/refdocs/modules/google/appengine/api/users#get_current_user)). Instead, define an `__init__()` method for the [Model](/appengine/docs/legacy/standard/python/datastore/modelclass) class that initializes the property values.\n\n required\n\n : If `True`, the property cannot have a value of `None`. A model instance must initialize all required properties in its constructor so that the instance is not created with missing values. An attempt to create an instance without initializing a required property, or an attempt to assign `None` to a required property, raises a [BadValueError](/appengine/docs/legacy/standard/python/datastore/exceptions#BadValueError).\n\n A property that is both required and has a default value uses the default value if one is not given in the constructor. However, the property cannot be assigned a value of `None`, and there is no automatic way to restore the default value after another value has been assigned. You can always access the property's `default` attribute to get this value and assign it explicitly.\n\n validator\n : A function that should be called to validate the property's value when the value is assigned. The function takes the value as its only argument, and raises an exception if the value is invalid. The given validator is called after other validation has taken place, such as the check that a required property has a value. When a non-required property is not given a value, the validator is called with argument `None`.\n\n choices\n : A list of acceptable values for the property. If set, the property cannot be assigned a value not in the list. As with required and other validation, a model instance must initialize all properties with choices so that the instance is not created with invalid values. If choices is `None`, then all values that otherwise pass validation are acceptable.\n\n indexed\n\n : Whether this property should be included in the built-in and developer-defined [indexes](/appengine/docs/legacy/standard/python/datastore/indexes). If `False`, entities written to the datastore will never be returned by queries that sort or filter on this property, similar to [Blob](/appengine/docs/legacy/standard/python/datastore/typesandpropertyclasses#Blob) and [Text](/appengine/docs/legacy/standard/python/datastore/typesandpropertyclasses#Text) properties.\n\n **Note:** Every indexed property adds a small amount of overhead, CPU cost, and latency to `put()` and `delete()` calls. If you'll never need to filter or sort on a property, consider using `indexed=False` to avoid that overhead. Be careful, though! If you decide later that you want the property indexed after all, changing it back to `indexed=True` will only affect writes from that point onward. Entities that were originally written with `indexed=False` will not be re-indexed.\n\nClass Attributes\n----------------\n\nSubclasses of the Property class define the following class attribute:\n\n`data_type`\n: The Python data type or class the property accepts as a Python-native value.\n\nInstance Methods\n----------------\n\nInstances of Property classes have the following methods:\n\ndefault_value()\n\n: Returns the default value for the property. The base implementation uses the value of the default argument passed to the constructor. A property class could override this to provide special default value behavior, such as [DateTimeProperty](/appengine/docs/legacy/standard/python/datastore/typesandpropertyclasses#DateTimeProperty)'s auto-now feature.\n\nvalidate(value)\n\n: The complete validation routine for the property. If value is valid, it returns the value, either unchanged or adapted to the required type. Otherwise it raises an appropriate exception.\n\n The base implementation checks that value is not `None` if required (the required argument to the base Property constructor), the value is one of the valid choices if the property was configured with choices (the choices argument), and the value passes the custom validator if any (the validator argument).\n\n The validation routine is called when a model using the property type is instantiated (with default or initialized values), and when a property of the type is assigned a value. The routine should not have side effects.\n\nempty(value)\n\n: Returns `True` if value is considered an empty value for this property type. The base implementation is equivalent to `not value`, which is sufficient for most types. Other types, like a Boolean type, can override this method with a more appropriate test.\n\nget_value_for_datastore(model_instance)\n\n: Returns the value that ought to be stored in the datastore for this property in the given model instance. The base implementation simply returns the Python-native value of the property in the model instance. A property class can override this to use a different data type for the datastore than for the model instance, or to perform other data conversion just prior to storing the model instance.\n\nmake_value_from_datastore(value)\n\n: Returns the Python-native representation for the given value from the datastore. The base implementation simply returns the value. A property class can override this to use a different data type for the model instance than for the datastore.\n\nmake_value_from_datastore_index_value(value)\n\n: Returns the Python-native representation for the given value from the datastore index. The base implementation simply returns the value. A property class can override this to use a different data type for the model instance than for the datastore."]]