A classe Property
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Observação: é altamente recomendável a desenvolvedores que criam novos aplicativos usar a biblioteca de cliente NDB, porque ela oferece diversos benefícios em comparação com esta biblioteca de cliente, como armazenamento em cache automático de entidades por meio da API Memcache. Se você estiver usando a antiga biblioteca de cliente DB, leia o Guia de migração de DB para NDB.
A classe Property é a superclasse de definições de propriedades para modelos de dados. Uma classe Property define o tipo do valor de uma propriedade, como valores são validados e como são armazenados no armazenamento de dados.
Property
é fornecido pelo módulo google.appengine.ext.db
.
Introdução
Uma classe de propriedade descreve o tipo de valor, valor padrão, lógica de validação e outros recursos de uma propriedade de um Model. Cada classe de propriedade é uma subclasse da classe Property. A API de armazenamento de dados inclui classes de propriedade para cada um dos tipos de valor de armazenamento de dados e diversas outras que fornecem recursos adicionais além dos tipos do armazenamento de dados. Consulte Tipos e classes de propriedade.
Uma classe de propriedade pode aceitar a configuração de argumentos passados ao construtor. O construtor da classe base aceita vários argumentos normalmente compatíveis em todas as classes de propriedade, inclusive todos os fornecidos na API de armazenamento de dados. Essa configuração pode incluir um valor padrão, a necessidade ou não de um valor explícito, uma lista de valores aceitáveis e lógica personalizada de validação. Consulte a documentação de um tipo específico de propriedade para mais informações sobre como configurá-la.
Uma classe de propriedade define o modelo de uma propriedade de armazenamento de dados. Ela não contém o valor da propriedade de uma instância de modelo. As instâncias da classe Property pertencem à classe Model, e não às instâncias da classe. Em termos do Python, as instâncias da classe de propriedade são "descritores" que personalizam como os atributos das instâncias de Model se comportam. Consulte a documentação do Python para mais informações sobre descritores.
Construtor
O construtor da classe base Property é definido conforme abaixo:
- class Property(verbose_name=None, name=None, default=None, required=False, validator=None, choices=None, indexed=True)
-
A superclasse das definições da propriedade de modelo.
Argumentos
- verbose_name
- Um nome amigável da propriedade. Este argumento precisa ser sempre o primeiro de um construtor de propriedade. A biblioteca
djangoforms
o usa a fim de criar rótulos para campos de formulário, e outros podem usá-lo com uma finalidade semelhante.
- name
- O nome de armazenamento da propriedade, usado em consultas. Ele assume como padrão o nome de atributo usado na propriedade. As classes de modelo têm atributos além das propriedades (que não podem ser usados em propriedades). Por isso, uma propriedade pode usar name para usar um nome de atributo reservado como nome da propriedade no armazenamento de dados e um nome diferente no atributo da propriedade. Consulte Nomes de propriedades não permitidos para mais informações.
- padrão
-
Um valor padrão para a propriedade. Se não for dado um valor à propriedade ou se o valor dado for None
, o valor será considerado o padrão.
Observação: as definições de classe Model são armazenadas em cache com o restante do código do aplicativo. Isso inclui o armazenamento em cache dos valores padrão das propriedades. Não defina um default na definição do modelo com dados específicos da solicitação (como users.get_current_user()
). Em vez disso, defina um método __init__()
para a classe Model que inicializa os valores da propriedade.
- required
-
Se True
, o valor da propriedade não pode ser None
. Uma instância de modelo precisa inicializar todas as propriedades obrigatórias no construtor. Dessa maneira, a instância não é criada com valores ausentes. Uma tentativa de criar uma instância sem inicializar uma propriedade obrigatória ou uma tentativa de atribuir None
a uma propriedade obrigatória, gera um BadValueError.
Uma propriedade obrigatória e que tenha um valor padrão vai utilizá-lo se não receber um valor no construtor. Entretanto, não é possível atribuir o valor None
à propriedade e não há uma forma automática de restaurar o valor padrão após a atribuição de outro valor. Você sempre pode acessar o atributo default
da propriedade para receber esse valor e atribuí-lo explicitamente.
- validador
- Uma função que precisa ser chamada para validar o valor da propriedade quando este é atribuído. A função utiliza o valor como o único argumento dela e vai gerar uma exceção se o valor for inválido. O validador indicado será chamado depois da realização de outra validação, como a verificação de valor de uma propriedade obrigatória. Quando uma propriedade não obrigatória não recebe um valor, o validador é chamado com argumento
None
.
- choices
- Uma lista de valores aceitáveis para a propriedade. Se definido, não será possível atribuir um valor fora da lista à propriedade. Assim como acontece com required e outra validação, uma instância de modelo precisa inicializar todas as propriedades com opções. Dessa maneira, a instância não é criada com valores inválidos. Se choices for
None
, todos os valores que passarem na validação serão aceitáveis.
- indexed
-
Se essa propriedade precisa ser incluída nos índices internos e definidos pelo desenvolvedor. Se False
, as entidades gravadas no armazenamento de dados nunca serão retornadas por consultas que classificam ou filtram essa propriedade, semelhante às propriedades Blob e Text.
Observação: toda propriedade indexada adiciona uma pequena quantidade de código extra, uso de CPU e latência para chamadas put()
e delete()
. Se você nunca vai precisar filtrar ou classificar em uma propriedade, considere usar indexed=False
para evitar esse código extra. No entanto, tome cuidado. Se mais tarde você decidir que quer que a propriedade seja indexada, mudá-la para indexed=True
apenas afetará gravações daquele ponto em diante. Entidades gravadas originalmente com indexed=False
não serão indexadas novamente.
Atributos da classe
As subclasses da classe Property definem o seguinte atributo de classe:
data_type
- O tipo de dados ou classe Python que a propriedade aceita como um valor nativo do Python.
Métodos de instância
As instâncias das classes Property têm os seguintes métodos:
- default_value()
-
Retorna o valor padrão da propriedade. A implementação base usa o valor do argumento default passado para o construtor. Uma classe de propriedade pode substituir isso para fornecer um comportamento de valor padrão especial, como o recurso auto-now de DateTimeProperty.
- validate(value)
-
A rotina de validação completa da propriedade. Caso value seja válido, ele retorna o valor inalterado ou adaptado ao tipo obrigatório. Do contrário, ele vai gerar uma exceção apropriada.
A implementação básica verifica se value não é None
caso seja obrigatório (o argumento required no construtor base de Property), se o valor é uma das opções válidas caso a propriedade tenha sido configurada com opções (o argumento choices) e se o valor passa na validação padrão, se houver (o argumento validator).
A rotina de validação é chamada quando é instanciado um modelo usando o tipo de propriedade (com valores padrão ou inicializados) e quando é atribuído um valor a uma propriedade desse tipo. A rotina não precisa ter efeitos colaterais.
- empty(value)
-
Retorna True
caso o valor seja considerado um valor vazio para esse tipo de propriedade. A implementação básica é equivalente a not value
, sendo suficiente para a maioria dos tipos. Outros tipos, como um booleano, podem ignorar este método com um teste mais apropriado.
- get_value_for_datastore(model_instance)
-
Retorna o valor que precisa ser armazenado para essa propriedade na instância de modelo dada no armazenamento de dados. A implementação básica retorna simplesmente o valor nativo do Python da propriedade na instância de modelo. Uma classe de propriedade pode ignorar isto para utilizar um tipo de dados diferente daquele da instância de modelo para o armazenamento de dados ou ainda para realizar outra conversão de dados imediatamente antes de armazenar a instância de modelo.
- make_value_from_datastore(value)
-
Retorna a representação nativa do Python do valor indicado do armazenamento de dados. A implementação base simplesmente retorna o valor. Uma classe de propriedade pode ignorá-la para usar a instância de modelo um tipo de dados diferente daquele do armazenamento de dados.
- make_value_from_datastore_index_value(value)
-
Retorna a representação nativa do Python do valor indicado do índice do armazenamento de dados. A implementação base simplesmente retorna o valor. Uma classe de propriedade pode ignorá-la para usar a instância de modelo um tipo de dados diferente daquele do armazenamento de dados.
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-09-04 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 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."]]