0

我正在管理员中使用 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

现在那些呈现的 html 选择的选项是通过 ajax 函数动态更新的。问题是在保存时,所选选项被识别为无效原因不在初始选择中:

Select a valid choice. <my_choice> is not one of the available choices.

关于如何解决它的任何想法?

也许继承原始的 ChoiceField 或 Select 小部件?

4

2 回答 2

2

我解决了__init__用所有可用的choiches填充那些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

虽然这不是计算成本方面的最佳方法,但这对我来说是完成这项特定任务的方法。

于 2013-09-24T17:47:35.260 回答
1

刚刚发现这个解决方案

它对我有用,请参考和旧帖子

于 2014-01-09T11:10:56.977 回答