Django модель сохранения "один ко многим" выдает ошибку

У меня есть модель экзамена, и я пытаюсь добавить форму для добавления нескольких экземпляров викторины в родительскую модель. Я получаю следующую ошибку raise ValueError( ValueError: Cannot assign "": "exam_quiz.quiz" должен быть экземпляром "Quiz"

class ExamQuizAdminForm(forms.ModelForm):

    class Meta:
        model = exam_quiz
        exclude = ['registrationDate','examdate']



    quiz = forms.ModelMultipleChoiceField(
        queryset=Quiz.objects.all(),
        required=False,
        label=_("Quiz"),
        widget=FilteredSelectMultiple(
            verbose_name=_("Quiz"),
            is_stacked=False))

    def __init__(self, *args, **kwargs):
        super(ExamQuizAdminForm, self).__init__(*args, **kwargs)
        if self.instance.pk:

            self.fields['quiz'].initial = \
                self.instance.quiz

    def save(self, commit=True):
        exam_quiz = super(ExamQuizAdminForm, self).save(commit=False)
        exam_quiz.save()
        exam_quiz.quiz_set.set(self.cleaned_data['Quiz'])

        self.save_m2m()
        return exam_quiz


class ExamQuizAdmin(admin.ModelAdmin):
    form = ExamQuizAdminForm

    list_display = ('examname','month','year')

Предполагая, что exam_quiz.quiz является полем m2m...

Я не думаю, что вам нужно переопределять функцию save в этом случае. Используйте функцию save_m2m(), если вы хотите, скажем, добавить дополнительные данные не из формы, а затем сохранить как обычные, так и m2m-данные из формы. Согласно docs

"Вызов save_m2m() требуется только в том случае, если вы используете save(commit=False). Когда вы используете save() на форме, все данные - включая данные типа "многие ко многим данные - сохраняются без необходимости дополнительных вызовов методов."

.

Здесь, однако, похоже, что единственное изменение, которое вы делаете, это добавление данных m2m, с которыми может справиться обычное сохранение.

Также вы можете попробовать сделать Викторину строчной, например,

exam_quiz.quiz_set.set(self.cleaned_data['quiz'])

поскольку я не думаю, что 'label' или 'verbose_name' влияют на имя поля HTML.

Вернуться на верх