Вот код, который я написал:
class DynamicForm(Form):
"""
Form that adds dynamically a second field if the first is defined
The content will change in function of the selected value
"""
first = ModelChoiceField(queryset=Firstmodel.objects.all(),
required=True,
initial=Firstmodel.objects.get(id=3),
widget=Select(attrs={'class': 'form-control'})
)
def __init__(self, *args, **kwargs):
"""
Dynamically add second field
"""
super(DynamicForm, self).__init__(*args, **kwargs)
if 'data' in kwargs:
if 'first' in kwargs['data']:
qs_second = Secondmodel.objects.filter(
first__id=kwargs['data']['first'])
# TODO still a problem to define the default initial value
self.fields['second'] = ModelChoiceField(queryset=qs_second,
# initial=4,
required=True,
widget=Select(
attrs={'class': 'form-control'})
)
self.fields['second'].initial = 4
return
Если я использую атрибут «initial» в ModelChoiceField, отображается первый элемент списка выбора (не соответствует id = 4), если я использую инструкцию 'self.fields [' second ']. initial = 4', список появится с пустым элементом, который предлагается по умолчанию. Пока я предпочитаю эту ситуацию, которая ясно показывает, что выбор еще не сделан. Но как включить первоначальный выбор (в моем случае id = 4)?