Python 如何在django模型表单中保存外键

Python 如何在django模型表单中保存外键,python,django,Python,Django,我有两个模型,一个表单和一个表单集,所以表单集包含表单的外来项,我想在保存表单和表单集时将addid保存到表单集 model.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,nul

我有两个模型,一个表单和一个表单集,所以表单集包含表单的外来项,我想在保存表单和表单集时将addid保存到表单集

model.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')
forms.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>
form.save()
返回它保存的实例。然后,我们可以对表单进行迭代,并为每个表单设置
f.instance
.foreign\u键

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.is\u valid()和formset.is\u valid():
instance=form.save()
实例=formset.save(提交=False)
在下列情况下,对于obj:
obj.foreign_key=实例
对象保存()

您可能首先要验证
表单
表单集
。因为如果其中一个无效。最好不要保存任何数据。

在解决了我自己的问题后,现在觉得自己很笨

因此,答案如下:

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()
form=fmodelForm(request.POST or None)
formset = smodelFormset(request.POST or None)

#Just add 
if request.method == 'POST':
   if form.is_valid() and if formset.is_valid():
      instance=form.save()
      forms=formset.save(commit=False)
      for f in forms:
       f.foreignkey=instance.id
       f.save()

由于某种原因,当我编写条件“if form.is\u valid()和formset.is\u valid():”时,表单集没有保存。@SharathNayak:等等,
formset.save()
将为您提供对象实例,而不是表单。因此,您迭代了
obj
s,请参见编辑。@SharathNayak:您是否将
外键
排除在
表单集
表单中包装的表单之外?当然,您不应该验证该字段,因为当时它还没有设置。我将“外键”排除在表单之外,我理解您的答案,但出于某种原因,如果我添加“如果条件”表单集没有保存值。@SharathNayak:那么
表单集.是否有效()
是否
为False
?您能否呈现/打印此表单集生成的错误?