mirror of https://github.com/django/django.git
git-svn-id: http://code.djangoproject.com/svn/django/trunk@3094 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
448becefdf
commit
f3f002b161
|
@ -836,8 +836,8 @@ def get_validation_errors(outfile, app=None):
|
||||||
if f.prepopulate_from is not None and type(f.prepopulate_from) not in (list, tuple):
|
if f.prepopulate_from is not None and type(f.prepopulate_from) not in (list, tuple):
|
||||||
e.add(opts, '"%s": prepopulate_from should be a list or tuple.' % f.name)
|
e.add(opts, '"%s": prepopulate_from should be a list or tuple.' % f.name)
|
||||||
if f.choices:
|
if f.choices:
|
||||||
if not type(f.choices) in (tuple, list):
|
if not hasattr(f.choices, '__iter__'):
|
||||||
e.add(opts, '"%s": "choices" should be either a tuple or list.' % f.name)
|
e.add(opts, '"%s": "choices" should be iterable (e.g., a tuple or list).' % f.name)
|
||||||
else:
|
else:
|
||||||
for c in f.choices:
|
for c in f.choices:
|
||||||
if not type(c) in (tuple, list) or len(c) != 2:
|
if not type(c) in (tuple, list) or len(c) != 2:
|
||||||
|
|
|
@ -445,7 +445,8 @@ empty value. If a field has ``blank=False``, the field will be required.
|
||||||
``choices``
|
``choices``
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
|
||||||
A list of 2-tuples to use as choices for this field.
|
An iterable (e.g., a list or tuple) of 2-tuples to use as choices for this
|
||||||
|
field.
|
||||||
|
|
||||||
If this is given, Django's admin will use a select box instead of the
|
If this is given, Django's admin will use a select box instead of the
|
||||||
standard text field and will limit choices to the choices given.
|
standard text field and will limit choices to the choices given.
|
||||||
|
@ -481,6 +482,12 @@ or outside your model class altogether::
|
||||||
class Foo(models.Model):
|
class Foo(models.Model):
|
||||||
gender = models.CharField(maxlength=1, choices=GENDER_CHOICES)
|
gender = models.CharField(maxlength=1, choices=GENDER_CHOICES)
|
||||||
|
|
||||||
|
Finally, note that choices can be any iterable object -- not necessarily a
|
||||||
|
list or tuple. This lets you construct choices dynamically. But if you find
|
||||||
|
yourself hacking ``choices`` to be dynamic, you're probably better off using
|
||||||
|
a proper database table with a ``ForeignKey``. ``choices`` is meant for static
|
||||||
|
data that doesn't change much, if ever.
|
||||||
|
|
||||||
``core``
|
``core``
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue