Django форма не может определить начальное значение поля, добавляемого динамически - PullRequest
0 голосов
/ 07 апреля 2020

Вот код, который я написал:

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)?

...