Во время обработки формы я хотел бы иметь возможность установить поле внешнего ключа для объекта модели из его базовой модели, когда пользователь выбирает значение из раскрывающегося списка. models.py класс Вопрос (models.Model) ...

0
Muhammad Q. Jami 5 Янв 2021 в 20:34

1 ответ

Лучший ответ

В первую очередь - критическая проблема на ваш взгляд. Вы используете несколько форм (что не так уж редко и вполне возможно), но вы проверяете только одну, но вы должны проверять ВСЕ из них. Об этом была хорошая статья, если найду, я свяжусь с ней в обновлениях. Ваша вторая ошибка возникает именно из-за этого - вы пытаетесь установить экземпляр из формы, которая не проверена.

 if all([form.is_valid(), form1.is_valid(), teacher_form.is_valid()]):

Во-вторых, да, вы не хотите save () эту форму учителя, вам даже не нужно, чтобы она была ModelForm, достаточно просто forms.Form с ModelChoiceField. Вам просто нужно проверить его, а затем получить доступ к cleaned_data.

# I'm renaming field to 'teacher' since 'name' is poor choice for Teacher object
teacher = teacher_form.cleaned_data['teacher']

И, наконец, для ряда форм вопросов вам, вероятно, понадобится модельный набор форм (2-3), постоянные формы могут подойти для текущего подхода, но большее или различное количество вопросов сделает это действительно надоедливым.

Наборы форм: https://docs.djangoproject.com/en /3.1/topics/forms/modelforms/#model-formsets

0
Gin Fuyou 6 Янв 2021 в 09:34