0

管理者で ModelForm を使用しています。の選択肢が取り込まれた 2 つの 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 select のオプションは、ajax 関数によって動的に更新されるようになりました。問題は、保存中に、選択したオプションが有効でないと認識されることです。原因は最初の選択肢にありません。

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

それを解決する方法について何か考えはありますか?

元の ChoiceField または Select ウィジェットをサブクラス化するのでしょうか?

4

2 に答える 2

2

これらの ChoiceField に__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

これは計算コストの点で最善のアプローチではありませんが、この特定のタスクで私にとってはうまくいきました。

于 2013-09-24T17:47:35.260 に答える