2013-09-21 2 views
0

Я работаю с ModelForm в admin. У меня есть два ChoiceFields которые населены с выборами в __init__:Django admin - динамическое обновление через ajax-выбор ChoiceField в ModelForm

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

Смежные вопросы