#33731: Updating choices of ChoiceField does not update the underlying widget's
choices
-------------------------------------+-------------------------------------
               Reporter:  Stefan-    |          Owner:  nobody
  Ionut Tarabuta                     |
                   Type:  Bug        |         Status:  new
              Component:  Forms      |        Version:  3.2
               Severity:  Normal     |       Keywords:  ChoiceField,
           Triage Stage:             |  choices, form
  Unreviewed                         |      Has patch:  0
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 == Issue

 The choices of ChoiceField can be updated by reassigning the choices
 attribute to a new list of choices. For example, the code below will
 append 2 more options to the existing choices.

 {{{
 self.fields["my_field"].choices += (("choice1", "Choice 1"), ("choice2",
 "Choice 2"))
 }}}

 Any operation which involves assignment correctly updates the choices of
 ChoiceField as well as the underlying widget's choices (what gets rendered
 in the browser).

 However, using other list operations, such as insert, will not update the
 underlying widget's choices. These operations are useful when precise
 ordering of choices is desired. For example, the following code will not
 update the underlying widget's choices (what gets rendered in the
 browser), but just the form field's choices:

 {{{
 self.fields["my_field"].choices.insert(5, ("choice1", "Choice 1"))
 }}}

 == Workaround

 The issue can be worked around by performing any assignment on the choices
 of the ChoiceField, but this is by no means a permanent solution. See the
 code below which will cause the widget choices to also be updated.

 {{{
 self.fields["my_field"].choices.insert(5, ("choice1", "Choice 1"))  #
 Insert desired choice. Field is updated, but widget is not.

 self.fields["my_field"].choices = self.fields["my_field"].choices  # Force
 the widget to be updated.
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33731>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/01070180e3057a30-e22417a5-931b-4d0b-bf4a-06f44382f45c-000000%40eu-central-1.amazonses.com.

Reply via email to