所以我一直在尝试更新三个模型,即
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,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'),}
我的 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模板中
页面看起来像这样