Opened 9 years ago
Last modified 9 years ago
#25085 closed Bug
Select Widget's __deepcopy__ does not copy its choices. — at Version 3
Reported by: | ericfc | Owned by: | ericfc |
---|---|---|---|
Component: | Forms | Version: | 1.8 |
Severity: | Normal | Keywords: | Select Widget deepcopy __deepcopy__ choices |
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 (last modified by )
Select inherits its parent's (Widget's) deepcopy which does not take into consideration its choices field and we get weird behavior like below:
from django import forms class Fields(forms.Form): field = forms.ChoiceField(choices=(('one', 'one'), ('two', 'two'))) class Foo(Fields): def __init__(self, *args, **kwargs): super(Foo, self).__init__(*args, **kwargs) self.fields['field'].widget.choices[0] = ('foo', 'foo') class Bar(Fields): pass foo = Foo() bar = Bar() foo.fields['field'].widget.choices >>>[('foo', 'foo'), ('two', 'two')] bar.fields['field'].widget.choices >>>[('foo', 'foo'), ('two', 'two')]
Where foo and bar have nothing to do with one another.
A more simple example:
import copy from django import forms widget = forms.Select() widget_copy = copy.deepcopy(widget) widget.attrs is widget_copy.attrs >>>False widget.choices is widget_copy.choices >>>True
Since we did a deepcopy the widget.choices is widget_copy.choices
must have returned False
yet it returned True
.
Change History (4)
comment:1 by , 9 years ago
Owner: | set to |
---|---|
Status: | new → assigned |
by , 9 years ago
Attachment: | 25085.diff added |
---|
comment:2 by , 9 years ago
comment:3 by , 9 years ago
Description: | modified (diff) |
---|
Note:
See TracTickets
for help on using tickets.
The pull request has been made:
https://github.com/django/django/pull/4965