我正在管理员中使用模型表单。我有两个选择字段,其中填充了__init__
中的选项:
self.fields['city'] = forms.ChoiceField(
required=False,
)
self.fields['city'].choices=get_cities_tuple(region_code=region_code)
self.fields['city'].initial = my_initial_city_value
self.fields['zip'] = forms.ChoiceField(
required=False,
)
self.fields['zip'].choices=get_cities_tuple(region_code=region_code, city_name=city_name)
self.fields['zip'].initial = my_initial_zip_value
现在,这些 HTML 选择呈现的选项通过 AJAX 函数动态更新。问题是,在保存时,所选选项被识别为无效,原因不在初始选择中:
Select a valid choice. <my_choice> is not one of the available choices.
关于如何解决它的任何想法?
也许对原始选择字段或选择小部件进行子类化?
我解决了在__init__
中填充所有可用的选择字段的问题,并且仅填充小部件选项:
def __init__(self, *args, **kwargs):
self.fields['city'] = forms.ChoiceField(
required=False,
choices=get_all_cities_tuple()
)
self.fields['zip'] = forms.ChoiceField(
required=False,
choices=get_all_zips_tuple()
)
self.fields['city'].widget.choices=get_cities_tuple(region_code=region_code)
self.fields['city'].initial = my_initial_city_value
self.fields['zip'].widget.choices=get_zips_tuple(
region_code=region_code,
city_name=city_name
)
self.fields['zip'].initial = my_initial_zip_value
虽然就计算成本而言,这不是最好的方法,但这就是对我完成这项特定任务的方法。
刚刚发现这个解决方案
它对我有用 参考和旧帖子