我有两个模型,一个表单和一个表单集,所以Formsets包含表单的外部表单,我想在保存表单和表单集时将添加id保存到表单集。
模型
class fmodel(models.Model):
name=models.TextField(blank=True,null=True)
class smodel(models.Model):
desc=models.TextField(blank=True,null=True)
n=models.ForeignKey(fmodel,null=True,blank=True,related_name='somemodel')
表格
class fmodelForm(forms.ModelForm):
name=forms.CharField(max_length=200,widget=forms.TextInput(attrs={'class': 'form-control'}))
class Meta:
model=fmodel
fields=['name']
smodelFormset=modelformset_factory(
smodel,
fields=('desc',),
extra=1,
widgets={
'desc':forms.TextInput(attrs={'class': 'u-form'})
}
)
模板
<div>
<form role="form" action="//" enctype='multipart/form-data' method="post" id="form_sample_2" class="form-horizontal" novalidate="">{% csrf_token %}
<div class="row">
<div class="col-md-6" style="margin-bottom: 30px;">
<label> name : </label>
{{form.name}}
</div>
<div class="col-md-6" style="margin-bottom: 30px;">
{{ form1.management_form }}
{% for f in form1 %}
<label> desc : </label>
{{f.desc}}
{% endfor %}
</div>
</div>
<input type="submit" value="Save" />
</form>
</div>
views.py
form=fmodelForm(request.POST or None)
formset = smodelFormset(request.POST or None)
if form.is_valid():
form.save()
if formset.is_valid():
forms=formset.save(commit=False)
for f in forms:
#here I want to add id of previously added form
f.save()
Aform.save()
返回它已保存的实例。然后,我们可以遍历形式,每种形式,设定.foreign_key
的f.instance
到该实例:
if form.is_valid() and formset.is_valid():
instance = form.save()
instances = formset.save(commit=False)
for obj in instances:
obj.foreign_key = instance
obj.save()
您可能首先要同时验证form
和formset
。由于如果两者之一是无效的。最好根本不保存任何数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句