Django: Сохранение со связанными полями через формы
Я довольно новичок в Python и Django, поэтому прошу не обижаться на меня. У меня есть два класса, которые связаны через ForeignKey. Я пытаюсь сохранить их оба через один экран, create.html, который ссылается на view.py. Затем я указываю используемые модели в form.py.
Моя настройка приведена ниже, и я получаю сообщение Not Valid. Я не уверен, что я делаю неправильно.
model.py
class Request(models.Model):
title = models.CharField(max_length=50, null=True)
description = models.CharField(max_length=200, null=True)
class RequestDocument(models.Model):
request = models.ForeignKey(Request, related_name='documents', on_delete=models.CASCADE)
document = models.FileField(upload_to=request_document_upload_handler)
view.py
def requests_create_view(request):
obj = Request
form = RequestForm(request.POST or None)
formset = RequestDocumentForm(request.POST or None)
context = {
"form": form,
"formset": formset,
"object": obj
}
if all([form.is_valid(), formset.is_valid()]):
parent = form.save(commit=False)
parent.save()
child = formset.save(commit=False)
child.request = parent
child.save()
context['message'] = 'Data saved.'
context['created'] = True
else:
print('Not Valid')
return render(request, "requests/create.html", context)
forms.py
class RequestDocumentForm(forms.ModelForm):
document = forms.FileField()
class Meta:
model = RequestDocument
fields = ['document']
class RequestForm(forms.ModelForm):
class Meta:
model = Request
fields = ['title', 'description']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# django-crispy-forms
for field in self.fields:
new_data = {
"class": 'form-control',
}
self.fields[str(field)].widget.attrs.update(
new_data
)
self.fields['description'].widget.attrs.update({'rows': '10'})
create.html
{% if not created %}
<div style="margin:80px">
<h1>New Request</h1>
<form method="post">
{% csrf_token %}
{{form|crispy}}
{{formset|crispy}}
<button type="submit">Submit</button>
</form>
</div>
{% else %}
<p>Your request was created.</p>
<a href='/requests/{{ object.id }}/'>{{ object.title }}</a>
{% endif %}