Django admin-通过模型形式中ChoiceField的ajax选项动态更新
我正在管理中使用一个模型表单。我有两个ChoiceFields,其中填充了Django admin-通过模型形式中ChoiceField的ajax选项动态更新,django,django-admin,django-forms,django-widget,Django,Django Admin,Django Forms,Django Widget,我正在管理中使用一个模型表单。我有两个ChoiceFields,其中填充了\uuuu init\uuuu中的选项: 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
\uuuu init\uuuu
中的选项:
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小部件的子类化?我解决了在
\uuuu init\uuuuu
中填充那些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
虽然就计算成本而言,这并不是最好的方法,但这正是我在这项特定任务中发挥作用的原因。我解决了用所有选项填充
\uuuuu init\uuuu
中的那些选项字段的问题,并且只填充小部件选项:
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
虽然就计算成本而言,这并不是最好的方法,但这正是我在这项特定任务中发挥作用的原因。刚刚找到了这个解决方案
这对我很有效,我刚刚找到了这个解决方案
它对我起了作用,而且链接帮助了我。链接是Stackoverflow。Stackoverflow是否更改其链接?链接提供的答案非常简短。包括关键部分将涉及复制整个答案。然后剽窃的问题就会出现。这个链接帮助了我。链接是Stackoverflow。Stackoverflow是否更改其链接?链接提供的答案非常简短。包括关键部分将涉及复制整个答案。然后,剽窃的问题就会出现。