我有两个模型和一个表单和一个表单集,所以表单集包含表单的外部内容,我想在保存表单和表单集时将添加的 ID 保存到表单集。
模型.py
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')
表单.py
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>
View .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()
请您参考如下方法:
form.save() 返回它保存的实例。然后我们可以遍历表单,对于每个表单,将 f.instance 的 .foreign_key 设置为该实例:
if form.is_valid() and formset.is_valid():
<b>instance =</b> form.save()
instances = formset.save(commit=False)
for obj in instances:
<b>obj.foreign_key = instance</b>
obj.save()
您可能首先要验证 form 和 formset。因为如果两者之一无效。最好根本不保存任何数据。
