Я создаю форму, которая позволяет пользователю выбирать аэропорт, а затем динамически ограничивает выбор терминала аэропорта.На странице это выглядит так:
Airport:
<select name="address_form-0-airport" id="id_address_form-0-airport">
<option value="" selected="selected">---------</option>
<option value="10">Sheremetyevo</option>
<option value="11">Bykovo</option>
<option value="12">Vnukovo</option>
<option value="13">Domodedovo</option>
</select></br>
Terminal:
<select name="address_form-0-terminal" id="id_address_form-0-terminal">
<option data-parent="-" value="" selected="selected">---------</option>
<option data-parent="Sheremetyevo" value="30">Terminal B</option>
<option data-parent="Sheremetyevo" value="31">Terminal C</option>
<option data-parent="Sheremetyevo" value="32">Terminal D</option>
Для создания выбора терминала я наследую виджет Select.Он использует словарь {терминал: аэропорт} для отображения параметров с атрибутом data-parent, который является именем аэропорта:
class TerminalSelect(forms.Select):
terminal_ports={}
def render_option(self, selected_choices, option_value, option_label):
if option_label in self.terminal_ports.keys():
airport=self.terminal_ports[option_label]
else:
airport="-"
option_value = force_unicode(option_value)
selected_html = (option_value in selected_choices) and u' selected="selected"' or ''
return u'<option data-parent="%s" value="%s"%s>%s</option>' % (
airport, escape(option_value), selected_html,
conditional_escape(force_unicode(option_label)))
А вот код формы, где поле является объявленным и создается словарь {терминал: аэропорт}:
class AdvancedAddressForm(Form):
airports_queryset=Airport.objects.all()
airport=forms.ModelChoiceField(required=False,queryset=airports_queryset)
terminals_queryset=AirportTerminal.objects.all()
terminal_ports={}
for terminal in terminals_queryset: terminal_ports[force_unicode(terminal.name)]=force_unicode(terminal.airport.name)
terminal_select_widget=TerminalSelect()
terminal_select_widget.terminal_ports=terminal_ports
terminal=forms.ModelChoiceField(required=False,queryset=terminals_queryset,widget=terminal_select_widget)
Работает, пока я не поменяю язык.Когда я меняю язык, названия аэропортов меняются в форме, но словарь {терминал: аэропорт} остается неизменным.Как это исправить?