Итак, я пытался обновить три модели:
models.py:
from django.db import models
from postlog.models import FlightNum
class pnr(models.Model):
pnr=models.CharField(max_length=9,primary_key=True)
def __str__(self):
return self.pnr
class name(models.Model):
pnr=models.OneToOneField(pnr,on_delete=models.CASCADE,related_name='p1')
name=models.CharField(max_length=10)
def __str__(self):
return self.name
class passenger(models.Model):
pnr=models.OneToOneField(pnr,on_delete=models.CASCADE,primary_key=True,related_name='p2')
name=models.ForeignKey(name,on_delete=models.CASCADE)
dob=models.CharField(max_length=10)
passport_no= models.CharField(max_length=10,blank=True)
fl_no=models.ForeignKey (FlightNum,on_delete=models.SET_NULL,null=True,unique=False)
Итак, я пытаюсь создатьформа, в которой я могу принять от пользователя данные для pnr, name, dob, passport_no и обновить все три модели одновременно
я создал 3 формы моделей, которые выглядят так:
forms.py:
from Django.forms import ModelForm
from postlog.models import FlightNum
from passenger.models import pnr,name,passenger
class pnrForm(ModelForm):
class Meta:
model = pnr
fields = '__all__'
labels = {
'pnr' : ('PNR')
}
class nameForm(ModelForm):
class Meta:
model = name
fields = ('name',)
labels = {
'name' : ('Name')
}
class passenForm(ModelForm):
class Meta:
model = passenger
fields = ('dob', 'passport_no', 'fl_no')
labels = {
'dob' : ('Date Of Birth'),
'passport_no' : ('Passport Number'),
'fl_no' : ('Flight Number'),
}
my views.py :
from django.shortcuts import render,redirect
from passenger.forms import passenForm, pnrForm, nameForm
from django.views.generic import ListView, CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
def passengerAdd(request):
if request.method =="POST":
formA = pnrForm(request.POST, prefix= 'pnr')
formB = nameForm(request.POST, prefix= 'name')
formC = passenForm(request.POST, prefix= 'pass')
if formA.is_valid() and formB.is_valid() and formC.is_valid():
fa = formA.save()
fb = formB.save(commit=False)
fb.pnr = fa
fb.save()
fc = formC.save(commit=False)
fc.pnr = fa
fc.name = fb
fc.save()
return redirect(reverse('passenger_list'))
else:
formA = pnrForm(prefix = 'pnr')
formB = nameForm(prefix = 'name')
formC = passenForm(prefix = 'pass')
args = {'formA' : formA, 'formB' : formB, 'formC' : formC}
return render(request, 'passenger_add.html', args)
И я включил все три формы в шаблон HTML
страница выглядит так 