Учитывая, что вы можете иметь несколько Pdf
с на Timeline
, вы должны определить ForeignKey
от Pdf
до Timeline
, поэтому:
class Timeline(models.Model):
header = models.CharField(max_length=30, choices=HEADER_CHOICES)
age = models.CharField(max_length=6, choices=AGE_CHOICES)
class Pdf(models.Model):
pdf = models.FileField(upload_to='timelinepdfs')
<b>timeline</b> = models.ForeignKey(Timeline, on_delete=models.CASCADE)
Вы просто комбинируете два формы:
from django.shortcuts import redirect
def upload_timeline(request):
if request.method == 'POST':
form = TimelineForm(request.POST, request.FILES)
form_pdf = PdfForm(request.POST, request.FILES)
if form.is_valid() and form_pdf.is_valid():
timeline = form.save()
form_pdf.instance.timeline = timeline
form_pdf.save()
return redirect(<i>'some-view'</i>)
else:
form = TimelineForm()
<b>form_pdf = PdfForm()</b>
return render(request, 'upload_timeline.html', {
'form': form,
<b>'form_pdf': form_pdf</b>
})
Вы должны заменить 'some-view'
на имя представления, на которое вы перенаправляете, в случае успешной отправки для реализации Post / Redirect / Получить pattern [wiki] .
В вашем шаблоне вы затем визуализируете обе формы в одном теге <form>
:
<form method="POST" action={% url <i>'url-of-upload_timeline'</i> %}">
{% csrf_token %}
<b>{{ form }}</b>
<b>{{ pdf_form }}</b>
<input type="submit" value="Submit">
</form>
где 'url-of-upload_timeline'
следует заменить именем вида функции upload_timeline
.