Clase Property
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Nota: Se recomienda enfáticamente a los desarrolladores que compilan aplicaciones nuevas que usen la biblioteca cliente de NDB, ya que tiene muchas ventajas en comparación con esta biblioteca cliente, como el almacenamiento en caché automático de entidades mediante la API de Memcache. Si por el momento usas la biblioteca cliente anterior de la base de datos, lee la Guía de migración de la base de datos a NDB.
La clase Property es la superclase de las definiciones de propiedad para modelos de datos. Una clase Property define el tipo de valor de una propiedad, cómo se validan los valores y cómo estos se almacenan en el almacén de datos.
El módulo google.appengine.ext.db
proporciona Property
.
Introducción
Una clase de propiedad describe el tipo de valor, el valor predeterminado, la lógica de validación y otras características de la propiedad de un Model. Cada clase es una subclase de la clase Property. La API del almacén de datos incluye clases de propiedad por cada tipo de valor del almacén de datos y otras que proporcionan características adicionales además de los tipos del almacén de datos. Consulta Tipos y clases Property.
Una clase de propiedad puede aceptar la configuración de argumentos que pasaron al constructor. El constructor de la clase básica admite varios argumentos que por lo general son admitidos en todas las clases de propiedad, incluidos aquellos proporcionados en la API de Datastore. Esta configuración puede incluir un valor predeterminado, uno explícito en caso de ser obligatorio, una lista de valores aceptables y la lógica de validación personalizada. Consulta la documentación sobre un tipo de propiedad específico para obtener más información sobre la configuración de la propiedad.
Una clase de propiedad define el modelo para una propiedad del almacén de datos. No contiene el valor de propiedad para una instancia de modelo. Las instancias de la clase Property pertenecen a la clase Model, no a las instancias de la clase. En términos de Python, las instancias de la clase Property son “descriptores” que permiten personalizar el comportamiento de los atributos de Model. Consulta la documentación de Python para obtener más información sobre los descriptores.
Constructor
El constructor de la clase básica Property se define de la manera siguiente:
- class Property(verbose_name=None, name=None, default=None, requiredFalse, validator=None, choices=None, indexed=True)
-
La superclase de definiciones de propiedad de los modelos.
Argumentos
- verbose_name
- Un nombre de propiedad fácil de usar. Este siempre debe ser el primer argumento para un constructor de propiedad. La biblioteca
djangoforms
lo usa para crear las etiquetas de los campos del formulario y otras pueden usarlo con propósitos similares.
- name
- El nombre de almacenamiento para la propiedad, usado en consultas. Esto establece de manera predeterminada el nombre del atributo que se usa para la propiedad. Debido a que las clases modelo tienen atributos diferentes de las propiedades (que no se pueden usar para las propiedades), una propiedad puede usar name a fin de usar un nombre de atributo reservado como nombre de la propiedad en el almacén de datos y usar uno diferente para el atributo de la propiedad. Consulta Nombres de propiedades no permitidos para obtener más información.
- predeterminada
-
Un valor predeterminado para la propiedad. Se considera que el valor es el predeterminado si al valor de la propiedad no se le asigna nunca un valor o si se le da el de None
.
Nota: Las definiciones de la clase modelo se almacenan en la caché con el resto de los códigos de la aplicación. Esto incluye el almacenamiento en la caché de valores predeterminados para las propiedades. No establezca un valor predeterminado en la definición del modelo con datos específicos de la solicitud (como users.get_current_user()
). En su lugar, define un método __init__()
para la clase Model que inicializa los valores de la propiedad.
- Obligatorio
-
Si es True
, la propiedad no puede tener un valor de None
. Una instancia de modelo debe inicializar todas las propiedades obligatorias en su constructor para que no se cree una instancia con valores faltantes. Si se intenta crear una instancia sin inicializar una propiedad obligatoria o se intenta asignar None
a una propiedad de este tipo, se generará un error BadValueError.
Una propiedad que es obligatoria y tiene un valor predeterminado, usa el valor predeterminado si no se le da uno en el constructor. Sin embargo, no se le puede asignar a la propiedad un valor de None
y no hay forma automática de restablecer el valor predeterminado después de asignar otro valor. Puedes acceder al atributo default
de la propiedad para obtener este valor y asignarlo de manera explícita.
- validador
- Una función a la que se debe llamar para validar el valor de la propiedad cuando se asigne. La función toma el valor como su único argumento y genera una excepción si el valor no es válido. Se llama al validador específico después de que se realiza otra validación, como la de verificar que una propiedad obligatoria tenga un valor. Cuando no se le da un valor a una propiedad obligatoria, se le llama al validador con el argumento
None
.
- choices
- Una lista de valores aceptables para la propiedad. Si ya está establecida, no se le podrá asignar a la propiedad un valor que no esté en la lista. Como con la validación obligatoria y otras, una instancia de modelo debe inicializar todas las propiedades con elecciones para que no se cree una instancia con valores no válidos. Si las elecciones son
None
, entonces serán aceptables todos los valores que aprueben la validación.
- indexed
-
Si esta propiedad debe incluirse en los índices integrados y definidos por desarrolladores. Si False
, las entidades escritas en el almacén de datos nunca ser mostrarán en las consultas que ordenan o filtran en esta propiedad, similares a las propiedades Blob y Text.
Nota: Cada propiedad indexada agrega una pequeña cantidad de sobrecarga, costo de CPU y latencia a las llamadas put()
y delete()
. Si nunca necesitarás ordenar ni filtrar en una propiedad, considera usar indexed=False
para evitar esa sobrecarga. Sin embargo, ten cuidado con lo siguiente. Si luego quieres indexar la propiedad, cambiarla de nuevo a indexed=True
solo afectará a las escrituras desde ese momento en adelante. Las entidades que originalmente se escribieron con indexed=False
no se volverán a indexar.
Atributos de clase
Las subclases de la clase Property definen el siguiente atributo de clase:
data_type
- El tipo o clase de datos de Python que la propiedad acepta como valor nativo de Python.
Métodos de instancia
Las instancias de las clases Property tienen los siguientes métodos:
- default_value()
-
Muestra el valor predeterminado de la propiedad. La implementación básica usa el valor del argumento predeterminado proporcionado al constructor. Una clase propiedad puede anular esto para proporcionar un comportamiento especial del valor predeterminado, como con la función auto_now de DateTimeProperty.
- validate(value)
-
La rutina de validación completa para la propiedad. Si el valor es válido, lo mostrará, ya sea sin modificaciones o adaptado al tipo obligatorio. De otra manera, mostrará una excepción adecuada.
La implementación básica verifica que el valor no sea None
si es obligatorio (el argumento obligatorio para el constructor básico Property), que el valor sea una de las elecciones válidas si la propiedad se configuró con elecciones (el argumento elecciones) y que el validador personalizado (el argumento validador) si lo hay, apruebe el valor.
Se llama a la rutina de validación cuando se crea una instancia para un modelo que usa el tipo de propiedad (con valores predeterminados o inicializados) y cuando a una propiedad del tipo se le asigna un valor. La rutina no debe tener efectos secundarios.
- empty(value)
-
Muestra True
si value se considera vacío para este tipo de propiedad. La implementación básica es equivalente a not value
, que es suficiente para la mayoría de los tipos. Otros tipos, como el booleano, pueden anular este método con una prueba más adecuada.
- get_value_for_datastore(model_instance)
-
Muestra el valor que se debe guardar en el almacén de datos para esta propiedad en la instancia de modelo especificada. La implementación básica solo muestra el valor nativo de Python de la propiedad en la instancia del modelo. Una clase propiedad puede anular esto con el fin de usar, para el almacén de datos, un tipo de dato diferente al de la instancia del modelo o de realizar otra conversión de datos justo antes de almacenar esta instancia.
- make_value_from_datastore(value)
-
Muestra la representación nativa de Python para el valor específico desde el almacén de datos. La implementación básica solo muestra el valor. Una clase Property puede anular esto con el fin de usar para la instancia de modelo un tipo de datos diferente al del almacén de datos
- make_value_from_datastore_index_value(value)
-
Muestra la representación nativa de Python para el valor específico desde el índice del almacén de datos. La implementación básica solo muestra el valor. Una clase Property puede anular esto con el fin de usar para la instancia de modelo un tipo de datos diferente al del almacén de datos
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-09-04 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 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."]]