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)

fix-14119.diff (3.7 KB ) - added by alexdutton 14 years ago.
Patch and regression tests

Download all attachments as: .zip

Change History (3)

by alexdutton, 14 years ago

Attachment: fix-14119.diff added

Patch and regression tests

comment:1 by Ramiro Morales, 14 years ago

Triage Stage: UnreviewedReady for checkin

comment:2 by Honza Král, 14 years ago

Resolution: fixed
Status: newclosed

(In [14199]) Fixed #14119 -- fields_for_model no longer returns all fields when fields parameter is the empty tuple. Thanks alexdutton!

Note: See TracTickets for help on using tickets.
Back to Top