..
.. META INFORMATION OF TRANSLATION
..
.. $TranslationStatus: Done, waiting for revision $
.. $OriginalRevision: 11268 $
.. $TranslationAuthors: Robson Mendonça $
..
.. INFO OF THIS FILE (DO NOT EDIT! UPDATED BY SUBVERSION)
..
.. $HeadURL$
.. $LastChangedRevision$
.. $LastChangedBy$
.. $LastChangedDate$
..
.. _ref-forms-fields:
====================
Campos de formulário
====================
.. module:: django.forms.fields
:synopsis: Campos de formulário embutidos do Django.
.. currentmodule:: django.forms
.. class:: Field(**kwargs)
Quando você cria uma class ``Form``, a parte mais importante é definir os campos
do formulário. Cada campo tem uma lógica de validação personalizada, juntamente
com alguns outros hooks.
.. method:: Field.clean(value)
Embora a principal maneira de você usar as classes ``Field`` seja dentro de
classes ``Form``, você pode também instanciá-las e usá-las para obter uma idéia
melhor de como elas funcionam. Cada instância de ``Fiel`` tem um método
``clean()``, que recebe um único argumento e ambos lançam uma excessão
``django.forms.ValidationError`` ou retorna o valor limpo::
>>> from django import forms
>>> f = forms.EmailField()
>>> f.clean('foo@example.com')
u'foo@example.com'
>>> f.clean(u'foo@example.com')
u'foo@example.com'
>>> f.clean('invalid e-mail address')
Traceback (most recent call last):
...
ValidationError: [u'Enter a valid e-mail address.']
Argumentos de campo do core
---------------------------
Cada construtor de classe ``Field`` recebe pelo menos estes argumentos. Algumas
classes ``Field`` recebem argumentos adicionais, específicos do campo, mas os
seguintes devem *sempre* ser aceitos:
``required``
~~~~~~~~~~~~
.. attribute:: Field.required
Por padrão cada classe ``Field`` assume que o valor é obrigatório, então se você
passar um valor vazio -- tanto ``None`` quando uma string vazia (``""``) --
então ``clean()`` lançará uma exeção ``ValidationError``::
>>> f = forms.CharField()
>>> f.clean('foo')
u'foo'
>>> f.clean('')
Traceback (most recent call last):
...
ValidationError: [u'This field is required.']
>>> f.clean(None)
Traceback (most recent call last):
...
ValidationError: [u'This field is required.']
>>> f.clean(' ')
u' '
>>> f.clean(0)
u'0'
>>> f.clean(True)
u'True'
>>> f.clean(False)
u'False'
Para especificar que o campo *não* é obrigatório, passe ``required=False`` para
o contrutor de ``Field``::
>>> f = forms.CharField(required=False)
>>> f.clean('foo')
u'foo'
>>> f.clean('')
u''
>>> f.clean(None)
u''
>>> f.clean(0)
u'0'
>>> f.clean(True)
u'True'
>>> f.clean(False)
u'False'
Se um ``Field`` tem ``required=False`` e você passar ao ``clean()`` um valor
vazio, então ``clean()`` retornará um valor *normalizado* vazio ao invés de
lançar uma exceção ``ValidationError``. Para ``CharField``, este será uma string
Unicode vazia. Para as outras classes ``Field``, poderá ser ``None``. (Isso
varia de campo para campo.)
``label``
~~~~~~~~~
.. attribute:: Field.label
O argumento ``label`` permite você especificar o "nome amigável" para este
campo. Isso é usado quando o ``Field`` é mostrado num ``Form``.
Como foi explicado no "Mostrando formulário como HTML" acima, a legenda padrão
para um ``Field`` é gerada a partir do nome do campo, convertendo todos os
sublinhados para espaços e pondo em maiúscula a primeira letra. Especifique
o ``label`` se o resultado padrão não for adquado.
Aqui temos um exemplo de ``Form`` completo que implementa ``label`` para dois
de seus campo. Nós especificamos ``auto_id=False`` para simplificar a saída::
>>> class CommentForm(forms.Form):
... name = forms.CharField(label='Your name')
... url = forms.URLField(label='Your Web site', required=False)
... comment = forms.CharField()
>>> f = CommentForm(auto_id=False)
>>> print f
Your name:
Your Web site:
Comment:
``initial``
~~~~~~~~~~~
.. attribute:: Field.initial
O argumento ``initial`` permite você especificar um valor inicial a ser usado
ao renderizar este ``Field`` num ``Form`` desacoplado.
Para especificar dados iniciais dinâmicos, veja o parámetro
:attr:`Form.initial`.
O caso de uso para isso é quando você quer mostrar um formulário "vazio" em que
um campo é inicializado com um valor em particular. Por exemplo::
>>> class CommentForm(forms.Form):
... name = forms.CharField(initial='Your name')
... url = forms.URLField(initial='http://')
... comment = forms.CharField()
>>> f = CommentForm(auto_id=False)
>>> print f
Name:
Url:
Comment:
Você pode estar pensando, por quê não passo um dicionário com os valores
iniciais quando estiver mostrando o formulário? Bem, se você fizer isso, você
irá disparar a validação, e a saída HTML incluirá qualquer erro de validação::
>>> class CommentForm(forms.Form):
... name = forms.CharField()
... url = forms.URLField()
... comment = forms.CharField()
>>> default_data = {'name': 'Your name', 'url': 'http://'}
>>> f = CommentForm(default_data, auto_id=False)
>>> print f
Name:
Url:
Enter a valid URL.
Comment:
This field is required.
É por isso que valores ``iniciais`` são somente mostrados por formulários
unbound. Para formulário bound.
Tamém note que valores ``inciais`` *não* são usados como dados "reserva" numa
validação se um valor de um campo em particular não for fornecido. Valores
``iniciais`` destinam-se *somente* para mostrar dados iniciais no formulário::
>>> class CommentForm(forms.Form):
... name = forms.CharField(initial='Your name')
... url = forms.URLField(initial='http://')
... comment = forms.CharField()
>>> data = {'name': '', 'url': '', 'comment': 'Foo'}
>>> f = CommentForm(data)
>>> f.is_valid()
False
# The form does *not* fall back to using the initial values.
>>> f.errors
{'url': [u'This field is required.'], 'name': [u'This field is required.']}
Ao invés de uma constante, você também pode passar qualquer função chamável::
>>> import datetime
>>> class DateForm(forms.Form):
... day = forms.DateField(initial=datetime.date.today)
>>> print DateForm()
Day:
A função chamável será avaliada somente quando o formulário unbound é exibido,
não quando é definido.
``widget``
~~~~~~~~~~
.. attribute:: Field.widget
O argumento ``widget`` permite você especificar uma classe ``Widget`` para usar
quando for renderizar este ``Field``. Veja :ref:`ref-forms-widgets` para mais
informações.
``help_text``
~~~~~~~~~~~~~
.. attribute:: Field.help_text
O argumento ``help_text`` permite você especificar um texto descritivo para este
``Field``. Se você fornece o ``help_text``, ele será mostrado próximo do
``Field`` quando o ele for renderizado por um dos métodos do ``Form``
convenientes (e.g., ``as_ul()``).
Aqui tem um exemplo de ``Form`` completo que implementa ``help_text`` para dois
de seus campos. Nós especificams ``auto_id=False`` para simplificar a saída::
>>> class HelpTextContactForm(forms.Form):
... subject = forms.CharField(max_length=100, help_text='100 characters max.')
... message = forms.CharField()
... sender = forms.EmailField(help_text='A valid e-mail address, please.')
... cc_myself = forms.BooleanField(required=False)
>>> f = HelpTextContactForm(auto_id=False)
>>> print f.as_table()
Subject:
100 characters max.
Message:
Sender:
A valid e-mail address, please.
Cc myself:
>>> print f.as_ul()
Subject: 100 characters max.
Message:
Sender: A valid e-mail address, please.
Cc myself:
>>> print f.as_p()
Subject: 100 characters max.
Message:
Sender: A valid e-mail address, please.
Cc myself:
``error_messages``
~~~~~~~~~~~~~~~~~~
.. versionadded:: 1.0
.. attribute:: Field.error_messages
O argumento ``error_messages`` permite você sobrescrever a mensagem padrão que
o campo mostrará. Passe um dicionário com chaves combinando com as mensagens de
erro que você deseja sobrescrever. Por exemplo, aqui temos a mensagem de erro
padrão::
>>> generic = forms.CharField()
>>> generic.clean('')
Traceback (most recent call last):
...
ValidationError: [u'This field is required.']
E aqui temos uma mensagem de erro personalizada::
>>> name = forms.CharField(error_messages={'required': 'Please enter your name'})
>>> name.clean('')
Traceback (most recent call last):
...
ValidationError: [u'Please enter your name']
Na seção `classes Field nativas`_ abaixo, cada ``Field`` define as chaves de
mensagens de error que usa.
Classes ``Field`` nativas
-------------------------
Naturalmente, a biblioteca ``forms`` vem com um conjunto de classes ``Field``
que representam as necessidades de validação comuns. Esta seçnao documenta cada
campo nativo.
Para cada campo, nós descrevemos o widget padrão usado se você não especificar
um ``widget``. Nós também especificamos o valor retornado quando você fornece
um valor vazio (veja a seção ``required`` acima para entender o que significa).
``BooleanField``
~~~~~~~~~~~~~~~~
.. class:: BooleanField(**kwargs)
* Widget padrão: ``CheckboxInput``
* Valor vazio: ``False``
* Normalizar para: Um valor Python ``True`` ou ``False``.
* Valida se o valor é ``True`` (e.g. a check box está selecionada) se o
campo tiver ``required=True``.
* Chaves de mensagem de erro: ``required``
.. versionchanged:: 1.0
O valor vazio para um ``CheckboxInput`` (e portanto o padrão
``BooleanField``) mudou para retornar ``False`` ao invés de ``None`` no
Django 1.0.
.. note::
Desde que todas as subclasses de ``Field`` possui ``required=True`` por
padrão, a condição de validação aqui é importante. Se você quiser incluir um
boleano no seu formulário que pode ser tanto ``True`` ou ``False`` (e.g.
uma checkbox marcada ou não), você deve lembrar de passar um
``required=False`` quando criar o ``BooleanField``.
``CharField``
~~~~~~~~~~~~~
.. class:: CharField(**kwargs)
* Widget padrão: ``TextInput``
* Valor vazio: ``''`` (uma string vazia)
* Normalizar para: Um objeto Unicode.
* Validates ``max_length`` or ``min_length``, if they are provided.
Otherwise, all inputs are valid.
* Chaves de mensagem de erro: ``required``, ``max_length``, ``min_length``
Possui dois argumentos opcionais para validação:
.. attribute:: CharField.max_length
.. attribute:: CharField.min_length
Se fornecido, estes argumentos asseguram que a string é no máximo ou no
mínimo do tamanho informado.
``ChoiceField``
~~~~~~~~~~~~~~~
.. class:: ChoiceField(**kwargs)
* Widget padrão: ``Select``
* Valor vazio: ``''`` (uma string vazia)
* Normalizar para: Um objeto Unicode.
* Valida se o valor fornecido está numa lista de escolhas.
* Chaves de mensagem de erro: ``required``, ``invalid_choice``
Recebe um argumento obrigatório extra:
.. attribute:: ChoiceField.choices
Um iterável (e.g., uma lista ou tupla) de tuplas duplas para usar como
opções para este campo.
``TypedChoiceField``
~~~~~~~~~~~~~~~~~~~~
.. class:: TypedChoiceField(**kwargs)
Assim como um :class:`ChoiceField`, exceto o :class:`TypedChoiceField` recebe um
argumento extra ``coerce``.
* Widget padrão: ``Select``
* Valor vazio: Qualquer coisa que você fornecer como um ``empty_value``
* Normalizar para: o valor retornado pelo argumento ``coerce``.
* Valida se o valor fornecido está numa lista de escolhas.
* Chaves de mensagem de erro: ``required``, ``invalid_choice``
Recebe argumentos extra:
.. attribute:: TypedChoiceField.coerce
Uma função que recebe um argumento e retorna um valor forçado. Os exemplos
incluem os tipos nativos ``int``, ``float``, ``bool`` e outros. Padrões para
uma função identificadora.
.. attribute:: TypedChoiceField.empty_value
O valor que representa "vazio." Padrão para a string vazia;
``None`` é outra escolha comum aqui.
``DateField``
~~~~~~~~~~~~~
.. class:: DateField(**kwargs)
* Widget padrão: ``TextInput``
* Valor vazio: ``None``
* Normalizar para: A Python ``datetime.date`` object.
* Valida se o valor passado é um ``datetime.date``, ``datetime.datetime``
ou uma string no formato particular de data.
* Chaves de mensagem de erro: ``required``, ``invalid``
Recebe um argumento opcional:
.. attribute:: DateField.input_formats
Uma lista de formatos usada para tentar converter uma string para um objeto
``datetime.date`` valido.
Se nenhum argumento ``input_formats`` for passado, os valores de entrada padrão
são::
'%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
'%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
'%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
'%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
'%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
``DateTimeField``
~~~~~~~~~~~~~~~~~
.. class:: DateTimeField(**kwargs)
* Widget padrão: ``DateTimeInput``
* Valor vazio: ``None``
* Normalizar para: Um objeto Python ``datetime.datetime``.
* Valida se o valor passado é tanto um ``datetime.datetime``,
``datetime.date`` ou uma string num formato de data.
* Chaves de mensagem de erro: ``required``, ``invalid``
Recebe um argumento opcional:
.. attribute:: DateTimeField.input_formats
Uma lista de formatos usado para tentar converter uma string para o objeto
``datetime.datetime``.
Se nenhum argumento ``input_formats`` for passado, os valores de entrada padrão
são::
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
'%Y-%m-%d', # '2006-10-25'
'%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
'%m/%d/%Y %H:%M', # '10/25/2006 14:30'
'%m/%d/%Y', # '10/25/2006'
'%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
'%m/%d/%y %H:%M', # '10/25/06 14:30'
'%m/%d/%y', # '10/25/06'
.. versionchanged:: 1.0
O ``DateTimeField`` usado para um widget ``TextInput`` por padrão. Isso
mudou.
``DecimalField``
~~~~~~~~~~~~~~~~
.. versionadded:: 1.0
.. class:: DecimalField(**kwargs)
* Widget padrão: ``TextInput``
* Valor vazio: ``None``
* Normalizar para: A Python ``decimal``.
* Validates that the given value is a decimal. Leading and trailing
whitespace is ignored.
* Chaves de mensagem de erro: ``required``, ``invalid``, ``max_value``,
``min_value``, ``max_digits``, ``max_decimal_places``,
``max_whole_digits``
Recebe quatro argumentos opcionais:
.. attribute:: DecimalField.max_value
.. attribute:: DecimalField.min_value
Estes atributos definem os limites para os valores do campo.
.. attribute:: DecimalField.max_digits
o número máximo de dígitos (aqueles antes do ponto decimal mais os que estão
depois do ponto decimal, com zeros na frente) permitidos no valor.
.. attribute:: DecimalField.decimal_places
O número máximo de casas decimais permitidas.
``EmailField``
~~~~~~~~~~~~~~
.. class:: EmailField(**kwargs)
* Widget padrão: ``TextInput``
* Valor vazio: ``''`` (uma string vazia)
* Normalizar para: Um objeto Unicode.
* Valida se o valor passado é um endereço de e-mail, usando uma expressão
regular moderadamente complexa.
* Chaves de mensagem de erro: ``required``, ``invalid``
Há dois argumentos opcionais para validação, ``max_length`` e ``min_length``.
Se fornecidos, estes argumentos asseguram que a string é no máximo e no mínimo
do comprimento fonecido.
``FileField``
~~~~~~~~~~~~~
.. versionadded:: 1.0
.. class:: FileField(**kwargs)
* Widget padrão: ``FileInput``
* Valor vazio: ``None``
* Normalizar para: Um objeto ``UploadedFile`` que envolve o contúdo do
arquivo e nome do arquivo dentro de um único objeto.
* Valida se os dados do arquivo não vazio foi delimitado para o formulário.
* Chaves de mensagem de erro: ``required``, ``invalid``, ``missing``,
``empty``
Para aprender mais sobre o objeto ``UploadFile``, veja a :ref:`documentação
de upload de arquivos `.
Quando vcê usa um ``FileField`` num formulário, você deve também lembrar de
:ref:`vincular os arquivos de dados ao formulário `.
``FilePathField``
~~~~~~~~~~~~~~~~~
.. versionadded:: 1.0
.. class:: FilePathField(**kwargs)
* Widget padrão: ``Select``
* Valor vazio: ``None``
* Normalizar para: Um objeto unicode
* Valida se as escolhas selecionadas existem na lista de ecolhas.
* Chaves de mensagem de erro: ``required``, ``invalid_choice``
O campo permite escolher arquivos dentro de um certo diretório. Ele recebe três
argumentos extras; somente ``path`` é obrigatório:
.. attribute:: FilePathField.path
O caminho absoluto para o diretório cujo conteúdo você deseja lista. Este
diretório deve existir.
.. attribute:: FilePathField.recursive
Se ``False`` (o padrão) somente os contúdos diretos do ``path`` serão
oferecidos como escolhas. Se ``True``, o diretório será apresentado
recursivamente e todos os descendentes serão listados como opções.
.. attribute:: FilePathField.match
Um padrão de expressão regular; somente arquivos com nomes combinando com
a expressão estarão nas escolhas.
``FloatField``
~~~~~~~~~~~~~~
* Widget padrão: ``TextInput``
* Valor vazio: ``None``
* Normalizar para: A Python float.
* Valida se o valor passado é um float. É permitido espaços vazios na frente
e no fim, como numa função ``float()`` do Python.
* Chaves de mensagem de erro: ``required``, ``invalid``, ``max_value``,
``min_value``
Recebe dois argumentos opcionais para validação, ``max_value`` e ``min_value``.
Este controle de intervalo de valores é permitido no campo.
``ImageField``
~~~~~~~~~~~~~~
.. versionadded:: 1.0
.. class:: ImageField(**kwargs)
* Widget padrão: ``FileInput``
* Valor vazio: ``None``
* Normalizar para: Um objeto ``UploadedFile`` que envolve o conteúdo do
arquivo e nome do arquivo entro de um único objeto.
* Valida se os dados do arquivo foram capiturados pelo formulário, e que o
arquivo é um formato de imagem inteligível pelo PIL.
* Chaves de mensagem de erro: ``required``, ``invalid``, ``missing``, ``empty``,
``invalid_image``
Usar um ImageField requer que a `Python Imaging Library`_ esteja instalada.
Quando você usa um ``ImageField`` num formulário, você deve também lembrar de
:ref:`vincular os arquivos de dados ao formulario `.
.. _Python Imaging Library: http://www.pythonware.com/products/pil/
``IntegerField``
~~~~~~~~~~~~~~~~
.. class:: IntegerField(**kwargs)
* Widget padrão: ``TextInput``
* Valor vazio: ``None``
* Normalizar para: Um inteiro ou inteiro longo do Python.
* Valida se o valor passado é um inteiro. É permitido usar espaços vazios
na frente e no final, como na função ``int()`` do Python.
* Chaves de mensagem de erro: ``required``, ``invalid``, ``max_value``,
``min_value``
Recebe dois argumentos opcionais:
.. attribute:: IntegerField.max_value
.. attribute:: IntegerField.min_value
Isso controla o intervalo de valores permitidos no campo.
``IPAddressField``
~~~~~~~~~~~~~~~~~~
.. class:: IPAddressField(**kwargs)
* Widget padrão: ``TextInput``
* Valor vazio: ``''`` (uma string vazia)
* Normalizar para: Um objeto Unicode.
* Valida se o valor passado é um endereço IPv4 válido, usando uma expressão
regular.
* Chaves de mensagem de erro: ``required``, ``invalid``
``MultipleChoiceField``
~~~~~~~~~~~~~~~~~~~~~~~
.. class:: MultipleChoiceField(**kwargs)
* Widget padrão: ``SelectMultiple``
* Valor vazio: ``[]`` (uma lista vazia)
* Normalizar para: Uma lista de objetos Unicode.
* valida se todo valor passado na lista de valores existe na lista de
escolhas.
* Chaves de mensagem de erro: ``required``, ``invalid_choice``,
``invalid_list``
Recebe um argumento extra, ``choices``, como para ``ChoiceField``.
``NullBooleanField``
~~~~~~~~~~~~~~~~~~~~
.. class:: NullBooleanField(**kwargs)
* Widget padrão: ``NullBooleanSelect``
* Valor vazio: ``None``
* Normalizar para: Um valor Python ``True``, ``False`` ou ``None``.
* Não valida nada (i.e., ele nunca lança um ``ValidationError``).
``RegexField``
~~~~~~~~~~~~~~
.. class:: RegexField(**kwargs)
* Widget padrão: ``TextInput``
* Valor vazio: ``''`` (uma string vazia)
* Normalizar para: Um objeto Unicode.
* Valida se o valor passado combina com uma certa expressão regular.
* Chaves de mensagem de erro: ``required``, ``invalid``
Recebe um argumentos obrigatório:
.. attribute:: RegexField.regex
Uma expressão regular especificada como um string ou como um objeto de
expressão regular compliado.
Também recebe ``max_length`` e ``min_length``, que funcionam da mesma forma como
no ``CharField``.
O argumento opcional ``error_message`` é também aceito por
retro-compatibilidade. A forma recomendada para fornecer uma mensagem de erro é
usar o argumento ``error_message``, passando um dicionário com ``'invalid'``
como uma chave a mensagem de erro como valor.
``TimeField``
~~~~~~~~~~~~~
.. class:: TimeField(**kwargs)
* Widget padrão: ``TextInput``
* Valor vazio: ``None``
* Normalizar para: Um objeto Python ``datetime.time``.
* Valida se o valor passado é um ``datetime.time`` ou uma string num formato
de hora em particular.
* Chaves de mensagem de erro: ``required``, ``invalid``
Recebe um argumento opicional:
.. attribute:: TimeField.input_formats
Uma lista de formatos usado para tentar converter uma string para um objeto
``datetime.time`` válido.
Se nenhum argumento ``input_formats`` for fornecido, os formatos da entrada
padrão são::
'%H:%M:%S', # '14:30:59'
'%H:%M', # '14:30'
``URLField``
~~~~~~~~~~~~
.. class:: URLField(**kwargs)
* Widget padrão: ``TextInput``
* Valor vazio: ``''`` (uma string vazia)
* Normalizar para: Um objeto Unicode.
* Valida se o dado valor é uma URL válida.
* Chaves de mensagem de erro: ``required``, ``invalid``, ``invalid_link``
Recebe os seguintes argumentos opcionais:
.. attribute:: URLField.max_length
.. attribute:: URLField.min_length
O mesmo como no ``CharField.max_length`` e ``CharField.min_length``.
.. attribute:: URLField.verify_exists
Se ``True``, o validador tentará carregar a URL passada, lançando um
``ValidationError`` se a página retornar um 404. O padrão é ``False``.
.. attribute:: URLField.validator_user_agent
String usada como o user-agent ao checar pela existência da URL.
O padrão é o valor da configuração ``URL_VALIDATOR_USER_AGENT``.
Classes ``Field`` nativas ligeiramente complexas
------------------------------------------------
O seguinte ainda não foi documentado.
.. class:: ComboField(**kwargs)
.. class:: MultiValueField(**kwargs)
.. class:: SplitDateTimeField(**kwargs)
Campos que manipulam relacionamentos
------------------------------------
Para representar o relacionamento entre dois models, dois campos são fornecidos
que podem derivar suas escolhas a partir de um ``QuerySet``:
.. class:: ModelChoiceField(**kwargs)
.. class:: ModelMultipleChoiceField(**kwargs)
Este campos agregam um ou mais campos de objetos model dentro do dicionário
``cleaned_data`` dos formulários em que eles são usados. Ambos os campos possuem
um argumento adicional obrigatório:
.. attribute:: ModelChoiceField.queryset
A ``QuerySet`` of model objects from which the choices for the
field will be derived, and which will be used to validate the
user's selection.
``ModelChoiceField``
~~~~~~~~~~~~~~~~~~~~
Permite a seleçnao de um único objeto de model, apropriado para representar uma
chave estrangeira.
O método ``__unicode__`` de um model será chamado para gerar a representação em
string dos objetos ao usá-los no campo de escolhas; para fornecer representações
personalizadas, extenda o ``ModelChoiceField`` e sobrescreva o
``label_form_instance``. Este método receberá um objeto de model, e deverá
retornar uma string adequada para representá-lo. Por exemplo::
class MyModelChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return "My Object #%i" % obj.id
.. attribute:: ModelChoiceField.empty_label
Por padrão o widget ``