﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
33731	Updating choices with list methods does not update widget's choices.	Stefan-Ionut Tarabuta	Aman Pandey	"== 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.
}}}
"	Cleanup/optimization	closed	Forms	3.2	Normal	wontfix	ChoiceField, choices, form		Unreviewed	0	0	0	0	0	0
