我一整天都在寻找解决问题的方法,没有运气,
我一直试图在视图中覆盖我的一个表单ModelChoiceField
,因为要过滤我的模型选择的数据位于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动态生成我的formset