Opened 15 years ago
Last modified 13 years ago
#11905 closed
modelform_factory returns a broken form when given wrong value for fields — at Version 4
Reported by: | ben | Owned by: | nobody |
---|---|---|---|
Component: | Forms | Version: | 1.1 |
Severity: | Keywords: | modelform_factory, modelform, fields | |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
modelform_factory is breaking where you ask for an invalid fields option (even if the field exists):
Here's a doctest that demonstrates:
>>> from django.forms.models import modelform_factory, form_for_fields >>> from django.contrib.auth.models import User >>> Form = modelform_factory(User, fields=['id', 'username']) >>> Form.base_fields {'id': None, 'username': <django.forms.fields.CharField object at 0xd4e4ad0>} >>> print Form() ------------------------------------------------------------ Traceback (most recent call last): ... if self.field.label is None: AttributeError: 'NoneType' object has no attribute 'label' Likewise you can specify fields that don't even exist on the model: >>> Form = modelform_factory(User, fields=['no-field', 'username']) >>> Form.base_fields {'no-field': None, 'username': <django.forms.fields.CharField object at 0xd4eec10>} >>> print Form() ------------------------------------------------------------ Traceback (most recent call last): ... if self.field.label is None: AttributeError: 'NoneType' object has no attribute 'label'
This appears to be due to logic in form_for_fields (line 102 in my checkout) in the first case, and fields_for_model (line 170) in the second.
I'd propose some error handling be put in place to give meaningfull exception in either of these cases rather than return a broken form to the user.
I'm happy to submit a patch (I can't do it from here as I'm at work and don't have direct access to django's svn repo) but I can do it from home.
Ben
Change History (4)
comment:1 by , 15 years ago
comment:2 by , 15 years ago
I wish this could have a patch as mentionned.
I get the same error on the SVN version and I don't know what is wrong.
http://paste.pocoo.org/show/146130/
Thank you.
comment:3 by , 15 years ago
I have the same error
Caught an exception while rendering: 'NoneType' object has no attribute 'label'
it's occurs on Admin page when i want to use editor to add data to a Model
if comment such models field, and remove it from Admin class for that model, all works fine
techspec = models.ManyToManyField('TechSpec', through = 'ModelTechSpec')
comment:4 by , 15 years ago
Description: | modified (diff) |
---|---|
milestone: | → 1.2 |
Triage Stage: | Unreviewed → Accepted |
Sorry screwed up the formatting, try: