#14158 closed (fixed)
SelectMultiple _has_changed assumes data and inital are in same order
Reported by: | Anssi Kääriäinen | Owned by: | nobody |
---|---|---|---|
Component: | Forms | Version: | 1.2 |
Severity: | Keywords: | ||
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
The _has_changed method assumes data and initial are in same order:
for value1, value2 in zip(initial, data): if force_unicode(value1) != force_unicode(value2): return True
This seems like a dangerous assumption, because initial and data might come from different sources. For example if you override the queryset for ModelMultipleChoiceField to have custom ordering, initial and data returned from the HTML form will probably differ in order. And by default m2m initial data in model forms is retrieved without any ordering, so it is just assumed that every time the query is run, the data will be retrieved in the same order. This is of course wrong.
Attachments (2)
Change History (6)
by , 14 years ago
Attachment: | sm_has_changed.diff added |
---|
comment:1 by , 14 years ago
Patch needs improvement: | set |
---|---|
Triage Stage: | Unreviewed → Accepted |
by , 14 years ago
Attachment: | 14158.diff added |
---|
comment:2 by , 14 years ago
Patch needs improvement: | unset |
---|---|
Triage Stage: | Accepted → Ready for checkin |
Added an attachment based on akaariai's, but with a more pythonic way to compare the sets.
comment:3 by , 14 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Looks like a legitimate bug