Django MultiModelFormView
Я использую django-multi-form-view для отображения 2 форм моделей на одной странице. У меня есть родительская модель и модель студента. Student имеет внешний ключ к parent, так как у меня может быть много детей на одного родителя. (отношения один ко многим)
models.py
class Parent(models.Model):
p_first_name = models.CharField(max_length=255)
p_last_name = models.CharField(max_length=255)
email = models.EmailField(unique=True)
def __str__(self):
return f'{self.p_first_name} {self.p_last_name}'
class Student(models.Model):
s_first_name = models.CharField(max_length=255)
s_last_name = models.CharField(max_length=255)
parent = models.ForeignKey('Parent', on_delete=models.CASCADE)
def __str__(self):
return f'{self.s_first_name} {self.s_last_name}'
forms.py:
class ParentRegistrationForm(forms.ModelForm):
class Meta:
model = Parent
fields = '__all__'
class StudentRegistrationForm(forms.ModelForm):
class Meta:
model = Student
fields = '__all__'
exclude = ['parent']
views.py:
class Registration(MultiModelFormView):
form_classes = {
'parent_form' : ParentRegistrationForm,
'student_form' : StudentRegistrationForm,
}
template_name = 'registration/index.html'
def get_success_url(self):
return reverse('registration')
def forms_valid(self, forms):
parent = forms['parent_form'].save(commit=False)
student = forms['student_form'].save(commit=False)
return super(Registration, self).forms_valid(forms)
Я пытаюсь понять, как я могу сначала сохранить родителя, а затем ссылаться на этого сохраненного родителя для значения родителя в моей форме модели ученика.
Спасибо
forms_valid()
вызывает save()
на каждой форме, поэтому, переопределяя, вы сохраните первую форму или получите значения из первой формы, например, получите фотографию из приведенной ниже формы photo_form, затем присвоите ее форме записи и затем сохраните форму записи.
Пример:
def forms_valid(self, forms):
photo = forms['photo_form'].save()
record = forms['record_form'].save(commit=False)
record.photo = photo
record.save()
return super(RecordFormView, self).forms_valid(forms)
Пример на ваших формах:
def forms_valid(self, forms):
parent = forms['parent_form'].save()
student = forms['student_form'].save(commit=False)
student.parent = parent
student.save()
return super(Registration, self).forms_valid(forms)