我在管理员中使用ModelForm。我有两个ChoiceFields,其中填充了__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
现在,通过ajax函数动态更新那些html选择渲染的选项。 问题是,在保存时,所选选项被识别为无效原因不在初始选择中:
Select a valid choice. <my_choice> is not one of the available choices.
有关如何解决它的任何想法?
可能是继承原始的ChoiceField或Select小部件吗?
答案 0 :(得分:2)
我解决了在__init__
中使用所有可用选项填充那些ChoiceField,并仅填充小部件选项:
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
虽然这不是计算成本方面的最佳方法,但这对于我的特定任务来说是有用的。
答案 1 :(得分:1)
刚刚找到了这个解决方案
它对我有用,请参考Old Post