Opened 15 years ago
Closed 15 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 , 15 years ago
| Attachment: | fix-14119.diff added |
|---|
comment:1 by , 15 years ago
| Triage Stage: | Unreviewed → Ready for checkin |
|---|
comment:2 by , 15 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Patch and regression tests