【问题标题】:Relationship between form and formset on same webpage同一网页上的表单和表单集之间的关系
【发布时间】:2011-11-27 22:55:57
【问题描述】:

我正在尝试将在表单集中创建的所有对象与在与表单集相同的网页上创建的对象相关联。因此,代码示例如下:

def create_b(request):
    SpeciesFormSet = modelformset_factory(Species, fields=('common', 'scientific'))
    if request.method == 'POST':
        formset = SpeciesFormSet(request.POST)
        form1 = BForm(request.POST)
        if form1.is_valid():
            objcreate = BModel.objects.create(
                                name = form1.cleaned_data['name'],
                                ...
                                )
            objcreate.save()
            for forms in formset.forms:
                if forms.is_valid():
                    formset1 = Species.objects.create (
                                common = forms.cleaned_data['common'],
                                scientific = forms.cleaned_data['scientific'],
                                BName = form1.cleaned_data['name']
                                )
                    formset1.save()
                else:
                    formset = SpeciesFormSet()
                    form1 = BForm()
                    c = {'SpeciesFormSet' : SpeciesFormSet, 'form1' : form1}
                    c.update(csrf(request))
                    return render_to_response('Forms/create_b.html', c)
            return HttpResponseRedirect('/accounts/profile')
    else:
        formset = SpeciesFormSet()
        form1 = BForm()
    c = {'SpeciesFormSet' : SpeciesFormSet, 'form1' : form1}
    c.update(csrf(request))
    return render_to_response('Forms/create_b.html', c)

我遇到的问题是,当尝试将表单集对象与表单一相关联时,它告诉我表单对象实际上并不存在。但是,它在数据库中创建对象,但没有任何 formset 对象。我收到错误“无法分配“u''”:“Species.BName”必须是“BModel”实例。”如果这有帮助。此外,该关系是一个外键。有没有办法解决这个问题?感谢您的宝贵时间。

【问题讨论】:

    标签: python django forms foreign-key-relationship formset


    【解决方案1】:

    这正是inline model formsets 的用途。

    【讨论】:

      【解决方案2】:

      从错误来看,您似乎正在分配一个 BName,而该属性应该是一个 BModel。或者,您想用 BModel 更改 BName,或者您需要修复您的模型,以便它们与 Species 的 BName 匹配。

      formset1 = Species.objects.create (
          common = forms.cleaned_data['common'],
          scientific = forms.cleaned_data['scientific'],
          BName = form1.cleaned_data['name']
      )
      formset1.save()
      

      【讨论】:

      • BName 是 Species 模型中的一个字段,它是通过 name 字段与 BModel 的 ForeignKey 关系。模型都很好,只是数据库没有足够快地保存 BModel 或类似的东西,不完全确定。
      猜你喜欢
      • 2014-03-30
      • 2012-08-17
      • 2011-12-16
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多