Django:在视图中设置inlineformset modelchoicefield查询

2024-06-28 19:18:20 发布

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

我一整天都在寻找解决问题的办法,但运气不好

我一直在试图重写视图中窗体的一个ModelChoiceField,因为筛选modelchoice的数据在views

我读过一些你可以使用的东西:

def somefunction(request):
    form = someform(request.POST)
    form.fields['formfield'] = forms.ModelChoiceField(queryset=YourModel.objects.filter(...))

但我用的是inlineformset_factory

我试过像这样在各个领域循环:

for item in form1:
        item.fields['formfield'] = forms.ModelChoiceField(queryset=YourModel.objects.filter(...))

但这会产生一个错误:[u'ManagementForm data is missing or has been tampered with']

但是我确实有{{ my_formset.management_form }},如果我删除循环部分并正常呈现表单集,我的测试应用程序就可以工作

以下是我的观点:

myformset1 = inlineformset_factory(parentmodel, childmodel, form = formset1, extra = 1, can_delete=True)
myformset2 = inlineformset_factory(parentmodel, childmodel2, form = formset2, extra = 1, can_delete=True)

def somefucntion(request):
    form = mymainform(request.POST)
    form1 = myformset1(request.POST, prefix='f1')
    form2 = myformset2(request.POST, prefix='f2')
    for item in form1:
        item.fields['form1field'] = forms.ModelChoiceField(queryset=YourModel.objects.filter(...))

    if request.method == 'POST':
        if form.is_valid():
           cde = form.save(commit = False)
            form1 = myformset1(request.POST, prefix='f1', instance = cde)
            form2 = myformset2(request.POST, prefix='f2', instance = cde)
            if form1.is_valid():
                if form2.is_valid():
                    form.save()
                    form1.save()
                    form2.save()
    else:
        form = mymainform()
        form1 = myformset1(instance = myparentmodel, prefix='f1')
        form2 = myformset2(instance = myparentmodel, prefix='f2')

    return render(request, 'frontend/apply.html', {'form': form, 'form1':form1, 'form2': form2})

任何提示或建议将不胜感激,谢谢

编辑

我正在使用Django-dynamic-formset动态生成我的表单集


Tags: instanceformfieldsprefixifisrequestsave