Mis favoritos | Español | Acceder

La clase Property

La clase Property es la superclase que permite definir propiedades para los modelos de datos. Una clase Property define el tipo de valor de una propiedad, la forma en que se validan los valores y la forma en que se almacenan los valores en el almacén de datos.

La clase Property se proporciona a través del módulo google.appengine.ext.db.

Introducción

Una clase de propiedad describe el tipo de valor, el valor predeterminado, la lógica de validación y otras funciones de una propiedad de una clase Model. Cada clase de propiedad es una subclase de la clase Property. El API del almacén de datos incluye clases de propiedad para cada uno de los tipos de valor del almacén de datos y otras que proporcionan funciones adicionales aparte de los tipos de almacén de datos. Consulta Tipos y clases de propiedades.

Una clase de propiedad puede aceptar la configuración de los argumentos transmitidos al constructor. El constructor de clases básico admite varios argumentos que se suelen admitir en todas las clases de propiedad, incluidas todas aquellas proporcionadas en el API del almacén de datos. Esta configuración puede incluir un valor predeterminado, tanto si es necesario un valor explícito como si no, una lista de valores aceptables y una lógica de validación personalizada. Para obtener más información sobre la configuración de un tipo de propiedad específico, consulta la documentación de dicho tipo de propiedad.

Una clase de propiedad define el modelo de una propiedad del almacén de datos. No contiene el valor de propiedad de una instancia de modelo. Las instancias de la clase Property pertenecen a la clase Model, no a instancias de la clase. En términos Python, las instancias de la clase Property son "descriptores" que permiten personalizar la forma en que se comportan los atributos de la instancia Model. Para obtener más información sobre los descriptores, consulta la documentación de Python.

Constructor

El constructor de la clase básica Property se define del siguiente modo:

class Property(verbose_name=None, name=None, default=None, required=False, validator=None, choices=None)

La superclase de las definiciones de la propiedad Model.

Argumentos:

verbose_name
Un nombre de la propiedad de fácil comprensión para el usuario. Siempre debe ser el primer argumento de un constructor de propiedades. La biblioteca djangoforms utiliza este argumento para crear las etiquetas de los campos de formulario. Otras bibliotecas pueden utilizarlo con fines similares.
name
El nombre de almacenamiento de la propiedad; utilizado en las consultas. El valor predeterminado es el nombre de atributo utilizado para la propiedad. Dado que las clases Model tienen atributos aparte de las propiedades (que no se pueden utilizar para las propiedades), una propiedad puede utilizar name para utilizar un nombre de atributo reservado como nombre de la propiedad en el almacén de datos y utilizar un nombre distinto para el atributo de propiedad. Para obtener más información, consulta Nombres de propiedades no permitidos.
default

Un valor predeterminado para la propiedad. Si al valor de la propiedad nunca se le proporciona un valor o se le proporciona un valor igual a None, el valor se considerará el valor predeterminado.

Nota: las definiciones de la clase Model se almacenan en caché junto con el resto del código de la aplicación. Esto incluye el almacenamiento en caché de los valores predeterminados de las propiedades. No establezcas default en la definición del modelo con datos específicos para la solicitud (por ejemplo, users.get_current_user()). En su lugar, define un método __init__() para la clase Model que inicialice los valores de propiedad.

required

Si se establece en True, la propiedad no podrá tener un valor igual a None. Una instancia de modelo debe inicializar todas las propiedades necesarias en su constructor, de modo que a la instancia no le falten valores durante su creación. Un intento de creación de una instancia sin inicializar una propiedad obligatoria o un intento de asignación de un valor None a una propiedad obligatoria, genera un error BadValueError.

Una propiedad que sea obligatoria y que tenga un valor predeterminado utilizará el valor predeterminado si no se proporciona uno en el constructor. No obstante, a la propiedad no se le puede asignar un valor igual a None, ya que no existe una forma automática de restaurar el valor predeterminado después de haber asignado otro valor. Siempre puedes acceder al atributo default de la propiedad para obtener este valor y asignarlo de forma explícita.

validator
Una función que se debe ejecutar para validar el valor de la propiedad cuando se asigna el valor. La función utiliza el valor como su único argumento y genera una excepción si el valor no es válido. La función validator determinada se ejecuta después que haya tenido lugar otra validación como, por ejemplo, la comprobación de que una propiedad obligatoria tiene un valor.
choices
Una lista de valores aceptables para la propiedad. Si se establece, no se podrá asignar a la propiedad un valor que no esté en la lista. Al igual que ocurre con required y con otras validaciones, una instancia Model debe inicializar todas las propiedades con opciones de modo que la instancia no se cree con valores no válidos. Si choices se establece en None, serán aceptables todos los valores que, de lo contrario, superarían la validación.

Atributos de clase

Las subclases de la clase Property definen el siguiente atributo de clase:

data_type
La clase o el tipo de datos Python que acepta la propiedad como valor nativo Python.

Métodos de instancia

Las instancias de las clases Property tienen los siguientes métodos:

default_value()

Devuelve el valor predeterminado para la propiedad. La implementación básica utiliza el valor del argumento default transmitido al constructor. Una clase de propiedad puede anularlo para proporcionar un comportamiento de valor predeterminado especial como, por ejemplo, la función de ejecución automática en el momento de DateTimeProperty.

validate(value)

La rutina de validación completa de la propiedad. Si value es válido, devolverá el valor, sin cambios o adaptado al tipo necesario. Si no, generará la excepción correspondiente.

La implementación básica comprueba que value no esté establecido en None si es obligatorio (el argumento required para el constructor de propiedades básico), que el valor sea una de las opciones válidas si la propiedad se ha configurado con opciones (el argumento choices) y que el valor transmita el validador personalizado, si existe alguno (el argumento validator).

La rutina de validación se ejecuta cuando se crea una instancia de un modelo que utiliza el tipo de propiedad (con valores inicializados o predeterminados) y cuando a una propiedad del tipo se le asigna un valor. La rutina no debe tener efectos secundarios.

empty(value)

Devuelve True si value se considera un valor vacío para este tipo de propiedad. La implementación básica es igual a not value, que es suficiente para la mayoría de los tipos. Otros tipos como, por ejemplo, Boolean pueden anular este método con una prueba más adecuada.

get_value_for_datastore(model_instance)

Devuelve el valor que se debe almacenar en el almacén de datos para esta propiedad en la instancia de modelo determinada. La implementación básica devuelve simplemente el valor nativo Python de la propiedad en la instancia de modelo. Una clase de propiedad puede anularlo para utilizar un tipo de datos para el almacén de datos distinto de la instancia de modelo o para realizar otra conversión de datos justo antes de almacenar la instancia de modelo.

make_value_from_datastore(value)

Devuelve la representación nativa Python para el valor determinado desde el almacén de datos. La implementación básica devuelve simplemente el valor. Una clase de propiedad puede anularlo para utilizar un tipo de datos distinto para la instancia de modelo y para el almacén de datos.