同一网页上表单与表单集的关系

2024-10-03 13:19:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将在表单集中创建的所有对象与在与表单集相同的网页上创建的对象相关联。代码的一个例子是:

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对象与formone关联时,它告诉我form对象实际上并不存在。它在数据库中创建对象,但是没有一个formset对象。我收到错误“无法分配”u“”:“物种.b名称必须是“BModel”实例。另外,这种关系也是一把外国钥匙。有什么办法解决这个问题吗?谢谢你的时间。你知道吗


Tags: 对象namedataifrequestcreateformscommon
2条回答

这个确切的模式就是inline model formsets的用途。你知道吗

从这个错误来看,您似乎在指定一个BName,其中属性应该是一个BModel。或者,您想用BModel更改BName,或者您需要修复您的模型,使它们与物种的BName匹配。你知道吗

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

相关问题 更多 >