Google Code disponible en: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
La clase Expando es una superclase de definiciones de modelos de datos cuyas propiedades se determinan de forma dinámica. Un modelo Expando puede incluir una combinación de propiedades fijas similares a Model y propiedades dinámicas asignadas a una entidad en el tiempo de ejecución.
La clase Expando se proporciona a través del módulo google.appengine.ext.db.
Expando es una subclase de Model y hereda su clase y los métodos de instancia de dicha clase. La clase Expando no define ni sobrescribe ningún método.
Un modelo Expando puede presentar propiedades fijas y propiedades dinámicas. Las propiedades fijas se comportan de forma similar a las propiedades de la clase Model y se definen de forma similar en la clase de modelo Expando mediante atributos de clase. Las propiedades dinámicas se crean cuando se les asignan valores en la instancia. Dos instancias de la misma clase Expando pueden incluir distintos conjuntos de propiedades dinámicas e incluso pueden contener propiedades dinámicas con el mismo nombre y distinto tipo. Las propiedades dinámicas siempre son opcionales y no presentan ningún valor predeterminado: no existen hasta que se les asigna un valor.
Las propiedades dinámicas no pueden utilizar instancias de Property para llevar a cabo una validación, establecer valores predeterminados o aplicar la lógica automática a valores. Las propiedades dinámicas únicamente almacenan valores de los tipos de almacenes de datos compatibles. Consulta Tipos y clases de propiedades.
A diferencia de las propiedades fijas, las propiedades dinámicas no pueden utilizar un nombre distinto para el nombre de propiedad de almacén de datos y el atributo de clase. Consulta Nombres de propiedades no permitidos.
Sugerencia: si deseas validar un valor de propiedad dinámica con una clase Property, puedes crear una instancia de la clase Property y ejecutar su método validate() en el valor.
Una subclase Expando puede definir propiedades fijas de forma similar a una clase Model. Las propiedades fijas de una clase Expando se comportan de forma similar a las propiedades de una clase Model. Una instancia de Expando puede presentar propiedades fijas y dinámicas simultáneamente.
import datetime
class Song(db.Expando):
title = db.StringProperty()
crazy = Song(title='Crazy like a diamond',
author='Lucy Sky',
publish_date='yesterday',
rating=5.0)
hoboken = Song(title='The man from Hoboken',
author=['Anthony', 'Lou'],
publish_date=datetime.datetime(1977, 5, 3))
crazy.last_minute_note=db.Text('Get a train to the station.')
Las propiedades dinámicas (no fijas) de una instancia de Expando se pueden eliminar. Para eliminar una propiedad dinámica, una aplicación elimina el atributo de la instancia:
del myobj.myprop
El constructor de la clase Expando se define del siguiente modo:
Una clase de modelo cuyas propiedades no se tienen que definir en la clase antes de su uso. Al igual que con la clase Model, se debe establecer una subclase de la clase Expando para definir el tipo de las entidades de datos.
Expando es una subclase de Model, por lo que hereda o sobrescribe sus métodos.
Argumentos:
El nombre de la nueva entidad. El nombre forma parte de la clave principal. Si es igual a None, se utilizará una ID generada por el sistema como clave.
El valor de key_name no debe comenzar por un número y no debe tener el formato __*__. Si tu aplicación utiliza datos enviados por el usuario como nombres de claves de entidades del almacén de datos (por ejemplo, una dirección de correo electrónico), la aplicación deberá depurar el valor en primer lugar. Una forma de hacerlo sería, por ejemplo, añadirle una cadena conocida como prefijo, como "key:", que cumpla estos requisitos.
key_name se almacena como una cadena de Unicode, con los valores str convertidos a texto ASCII.