Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django中呈现嵌套表单集并保存?_Python_Jquery_Django_Django Forms - Fatal编程技术网

Python 如何在django中呈现嵌套表单集并保存?

Python 如何在django中呈现嵌套表单集并保存?,python,jquery,django,django-forms,Python,Jquery,Django,Django Forms,问题:我对第一次嵌套表单的第三个表单有一个问题,当我删除所有表单中嵌套的任何子表单时,它会正确呈现。我怎样才能解决这个问题 最终目标:我想建立一个由三个表单组成的注册表单第一个表单是基本登录信息,第二个表单可以有多个单一表单的实例,用户可以在其中添加或删除更多表单。和第三个表单(如果嵌套),用户也可以从中添加或删除它。所有这些都在一个提交按钮下完成 我所做的:此时,我能够构建所有表单并存储前两个表单,它们是基本注册信息,第二个表单有多个实例 #model.py 类别供应商(基本模型): user

问题:我对第一次嵌套表单的第三个表单有一个问题,当我删除所有表单中嵌套的任何子表单时,它会正确呈现。我怎样才能解决这个问题

最终目标:我想建立一个由三个表单组成的注册表单第一个表单是基本登录信息,第二个表单可以有多个单一表单的实例,用户可以在其中添加或删除更多表单。和第三个表单(如果嵌套),用户也可以从中添加或删除它。所有这些都在一个提交按钮下完成

我所做的:此时,我能够构建所有表单并存储前两个表单,它们是基本注册信息,第二个表单有多个实例

#model.py
类别供应商(基本模型):
user=models.OneToOneField(user,on_delete=models.CASCADE,unique=True)
地址=models.CharField(最大长度=100)
mobile_no=models.CharField(最大长度=12)
gst=models.CharField(最大长度=20)
代码=models.CharField(最大长度=20)
定义(自我):
如果(self.user.first_name!=无):
返回self.user.username
其他:
返回self.user.first\u名称
#供应商可以处理的材料
类别VendorMaterial(基本模型):
供应商=模型.ForeignKey(供应商,on_delete=模型.CASCADE)
材质=模型.ForeignKey(材质,on_delete=模型.CASCADE)
类VendorProcess(基本模型):
供应商=模型.ForeignKey(供应商,on_delete=模型.CASCADE)
process=models.ForeignKey(ProcessType,on_delete=models.CASCADE)
def_get_全名(self):
回归自回归过程
全名=属性(\u获取\u全名)
定义(自我):
返回self.process.name
#供应商提供的用于该过程的机器
类别VendorProcessMachine(基本型号):
供应商流程=models.ForeignKey(供应商流程,on\u delete=models.CASCADE)
brand_name=models.CharField(最大长度=100,空白=True)
精度=型号.CharField(最大长度=100,空白=真)
床尺寸=型号.CharField(最大长度=100,空白=真)
制造年份=models.CharField(最大长度=10,空白=True)
数量=型号.CharField(最大长度=50,空白=真)
定义(自我):
返回自己的品牌名称
forms.py

来自django导入表单的

从django.contrib.auth.forms导入UserCreationForm
从django.forms导入ModelForm、inlineformset\u工厂、formset\u工厂
from.models导入用户、供应商、供应商材料、供应商流程、供应商流程机器
类VendorSignupForm(UserCreationForm):
first_name=forms.CharField(最大长度=100,label=“name”)
mobile_no=forms.CharField(最大长度=12)
地址=forms.CharField(最大长度=100)
gst=forms.CharField(最大长度=12)
username=forms.EmailField(最大长度=64,label=“Email”)
类元(UserCreationForm.Meta):
模型=用户
字段=(“名字”、“地址”、“用户名”、“手机号码”、“密码1”、“密码2”、“gst”)
排除=()
类供应商格式(模型格式):
类元:
型号=供应商材料
字段=(“材料”,)
类VendorProcessForm(ModelForm):
类元:
模型=供应商流程
字段=('process',)
类VendorProcessMachineForm(ModelForm):
类元:
型号=自动售货机
字段=(“品牌名称”、“精度”、“床尺寸”、“制造年份”、“数量”)
VendormaterFormSet=inlineformset\u工厂(供应商、Vendormater、can\u delete=False、extra=1、form=VendormaterForm)
VendorProcessFormset=inlineformset\u工厂(Vendor,VendorProcess,extra=1,can\u delete=False,form=VendorProcessForm)
VendorProcessMachineFormset=inlineformset\u工厂(VendorProcess,VendorProcessMachine,extra=1,can\u delete=False,form=VendorProcessMachineForm)
views.py

#view.py
类别VendorSignUpView(CreateView):
模型=用户
表格\类别=供应商签名表格
模板名称='signup.html'
def获取上下文数据(自身,**kwargs):
context=super()。获取上下文数据(**kwargs)
如果self.request.POST:
上下文['vendor\u material\u formset']=VendorMaterialFormset(self.request.POST,前缀=“vendor\u material\u formset”)
上下文['vendor\u process\u formset']=VendorProcessFormset(self.request.POST,前缀=“vendor\u process\u formset”)
上下文['vendor\u process\u machine\u formset']=VendorProcessMachineFormset(self.request.POST,prefix=“vendor\u process\u machine\u formset”)
其他:
上下文['vendor\u material\u formset']=VendorMaterialFormset(前缀=“vendor\u material\u formset”)
上下文['vendor\u process\u formset']=VendorProcessFormset(前缀=“vendor\u process\u formset”)
上下文['vendor\u process\u machine\u formset']=VendorProcessMachineFormset(前缀=“vendor\u process\u machine\u formset”)
返回上下文
def表单_有效(自身、表单):
context=self.get\u context\u data()
供应商材料=上下文['vendor\u material\u formset']
user=form.save(commit=False)
user.is_vendor=True
user.is_staff=True
user.email=form.cleaned\u data.get('username'))
user=form.save()
data=表格.U数据
vendor=vendor.objects.create(user=user,address=data['address'],mobile\u no=data['mobile\u no'],
gst=数据['gst'])
#拯救
使用transaction.atomic():
如果供应商的物料有效():
打印(供应商材料)
供应商\物料实例=供应商
供应商_物料保存()
#供应商工艺机器
登录(self.request,用户)
返回重定向('home')
template.html

{%extends'base.html%}
{%load static%}
{%block content%}
注册
{%csrf_令牌%}
{{form.as_p}}
{{vendor\u material\u formset.management\u form}
{vendor\u material\u formset%中的vendor\u material的百分比}