Opened 16 years ago
Closed 16 years ago
#11548 closed (invalid)
choices in models.CharField accepts method but no property
| Reported by: | gatwanagu | Owned by: | nobody |
|---|---|---|---|
| Component: | Uncategorized | Version: | dev |
| Severity: | Keywords: | ||
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Trying to generate the choices list for models.charField dynamically the following problem occurred.
somefield = = models.CharField(
verbose_name=_('somefield'),
max_length="20",
choices=config.SOMEFIELD_CHOICES(),
default=config.SOMEFIELD_DEFAULT,
help_text=_('Some field.'),
)
where SOMEFIELD_CHOICES was a method:
def SOMEFIELD_CHOICES():
"""Return subset of tuples as needed by Django"""
return [(key, u'%s' % value[0]) for (key, value) in _SOMEFIELD_CHOICES.iteritems()]
is accepted by the model check, while doing it like
somefield = = models.CharField(
verbose_name=_('somefield'),
max_length="20",
choices=config.SOMEFIELD_CHOICES,
default=config.SOMEFIELD_DEFAULT,
help_text=_('Some field.'),
)
where SOMEFIELD_CHOICES is a property:
@property
def SOMEFIELD_CHOICES(:
"""Return subset of tuples as needed by Django"""
return [(key, u'%s' % value[0]) for (key, value) in _SOMEFIELD_CHOICES.iteritems()]
throws the following error:
Validating models...
Unhandled exception in thread started by <function inner_run at 0x01392B30>
Traceback (most recent call last):
File "D:\pyt\25\lib\site-packages\django\core\management\commands\runserver.py", line 48, in inner_run
self.validate(display_num_errors=True)
File "D:\pyt\25\lib\site-packages\django\core\management\base.py", line 253, in validate
raise CommandError("One or more models did not validate:\n%s" % error_text)
django.core.management.base.CommandError: One or more models did not validate:
example.example: "somefield": "choices" should be iterable (e.g., a tuple or list).
I feel that Django should also accept the property version.
Rgds
Günter
Note:
See TracTickets
for help on using tickets.
Properties can only exist on instances of a class, therefore you're giving Django a property object.