我正在从提交的表单生成一个对象。我想把生成的AutoField
作为一个隐藏的表单元素传递给下一个表单。但是,我不知道如何将变量从post()
传递到get_context_data()
。我知道先调用post()
,然后再调用get_context_data()
,但是将变量添加到self
并不能得到我期望的结果(属性在self
上不存在)。在
以下是我所经历的一个例子:
def get_context_data(self, **kwargs):
context = super(MyView, self).get_context_data(**kwargs)
print self.hello
return context
def post(self, request, *args, **kwargs):
self.hello = "hello"
return HttpResponseRedirect(request.path)
在get_context_data
中调用时,self.hello
无效。我觉得我可能搞错了HttpResponseRedirect(request.path)
调用,但我不确定如何呈现模板。在
这是一个简单的错误,还是我应该用完全不同的方式来处理这个问题?在
你必须找到一种方法将对象ID传递到下一页。想到的选项是把它放在URL中,或者像solarismoke建议的那样在会话中保存它。如果在url中执行,也可以将页面序列放在那里(表示forst表单为1,第二个表单为2…)。在
这种方法的好处是,您可以在一个视图中覆盖所有功能:根据页面设置,在get_object方法中设置相应的字段(自身字段=[..])和get_template_names方法中的模板名称。在
因此,使用Updateview时,它将如下所示:
在网址.py公司名称:
在视图.py公司名称:
^{pr2}$你必须确保你的所有字段都可以为空。在
通过自己定义
post
,您已经覆盖了视图的默认行为。您可以看到没有调用get_context_data或任何其他类方法,因此自然不会调用它们。在通常不应重写特定的get或post方法。您没有显示完整的视图,因此不清楚您要实现什么行为,但例如在表单视图中,您需要定义
success_url
来设置提交后表单重定向到的位置。在相关问题 更多 >
编程相关推荐