2013-09-21 138 views
0

我正在使用管理員中的ModelForm。我有在__init__填充選擇2個ChoiceFields:Django admin - 通過ModelForm中的ChoiceField的ajax選項動態更新

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小部件?

回答

2

我解決了填充那些ChoiceField在__init__與所有可用choiches和填充只有小部件的選擇:

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

剛剛發現這個解決方案

它爲我指和Old Post

+0

鏈接幫助了我。鏈接到Stackoverflow。 Stackoverflow會改變它的鏈接嗎?鏈接提供的答案非常短。包括基本部分將涉及複製整個答案。那麼剽竊問題就會出現。 – Chuck

相關問題