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.