Django admin-通过模型形式中ChoiceField的ajax选项动态更新

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

我正在管理中使用一个模型表单。我有两个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

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是否更改其链接?链接提供的答案非常简短。包括关键部分将涉及复制整个答案。然后,剽窃的问题就会出现。