我在django中使用多个表单,比如formA、formB、formC,其中formB和formC有formA的外键。每个表单都有提交按钮发布请求。所以我写了一个观点如下
在视图.py在
def mainview(request):
if request.method == 'POST':
if 'form_a' in request.POST:
a_form = FormA(request.POST, prefix = "a")
b_form = FormB(prefix = "b")
if a_form.is_valid():
a = a_form.save()
return render_to_response('myApp/formB.html', {'b_form': b_form,},context_instance=RequestContext(request))
return render_to_response('myApp/formA.html',{'a_form':a_form,},context_instance=RequestContext(request))
elif 'form_b' in request.POST:
b_form = FormB(request.POST, prefix="b")
c_form = FormB(prefix = "c")
if b_form.is_valid():
b_form.save()
return render_to_response('myApp/formC.html', {'c_form': c_form,},context_instance=RequestContext(request))
return render_to_response('myApp/formB',{'b_form':b_form,}, context_instance=RequestContext(request))
else:
c_form = FormC(request.POST, prefix = "c")
if c_form.is_valid():
c_form.save()
return HttpResponse("Added successfully")
return render_to_response('myApp/formC.html',{'c_form':c_form,}, context_instance=RequestContext(request))
else:
a_form = ProjectForm(prefix = "a")
return render_to_response('myApp/formA.html', {'a_form':a_form,},context_instance=RequestContext(request))
其中form_a和form_b是模板中提交按钮的名称。上面的视图将外键显示为下拉列表。我的问题是,我需要外键作为标签或隐藏值,用户不应被允许选择外键。它应该自动从formA映射到formB和formC。 如果我在表单中排除foreignKey字段,如下所示
^{pr2}$并按如下方式设置FK
if b_form.is_valid():
b_form.save(commit=False)
b_form.fkfield = a
b_form.save()
在表b上请求.POST,它抛出以下错误
local variable 'a' referenced before assignment
我的问题是,对于每个POST请求,如何将foreignKey映射到其他表单?在
是的,我有一个解决方案,但不确定它是否标准。请张贴任何其他可能比这更好的答案。这是我的解决方案
在调用下一个表单时,解析保存的表单“a”,如下所示
现在aSaved变量存储了模型值。在模板中(表单.html),将id作为隐藏输入传递。在其视图中,使用以下语句检索模型
^{pr2}$其中id是隐藏的变量名。 记住要在fkfield的表单定义中排除它。在
这里这行
a = a_form.save()
只存在于第一个条件中,即if 'form_a' in request.POST:
因此,在执行第二个或第三个条件时,即对于b和c,它没有变量名a
,所以抛出错误-local variable 'a' referenced before assignment
你也可以这样做,先把A表保存到A模式
然后编辑表单B和C以包含更新的隐藏值,属性相同。在
相关问题 更多 >
编程相关推荐