Opened 14 years ago
Closed 14 years ago
#14119 closed (fixed)
fields_for_model returns all fields when fields parameter is the empty tuple
Reported by: | alexdutton | Owned by: | nobody |
---|---|---|---|
Component: | Forms | Version: | 1.2 |
Severity: | Keywords: | model forms | |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
When attempting to use modelformset_factory
to generate forms where the user can only delete objects (i.e. not edit them), one would expect a fields=()
to create forms with only delete checkboxes. However, fields_for_model
uses the following check to determine whether to restrict fields:
if fields and not f.name in fields: continue
When passed the empty tuple, fields are never skipped as bool( () ) == False, resulting in all fields being displayed.
This should be:
if fields is not None and not f.name in fields: continue
I've attached a patch for both construct_instance
(which also has the wrong behaviour) and fields_for_model
.
The additional regression tests cover construct_instance
, fields_for_model
, modelformset_factory
and ModelForm
. The latter is included even though the usage of fields=()
in the this case is arguably nonsensical.
Attachments (1)
Change History (3)
by , 14 years ago
Attachment: | fix-14119.diff added |
---|
comment:1 by , 14 years ago
Triage Stage: | Unreviewed → Ready for checkin |
---|
comment:2 by , 14 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Patch and regression tests