从post()传递数据以获取\u context\u Data()

2024-04-24 11:02:50 发布

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

我正在从提交的表单生成一个对象。我想把生成的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)调用,但我不确定如何呈现模板。在

这是一个简单的错误,还是我应该用完全不同的方式来处理这个问题?在


Tags: path对象self表单hellodatagetreturn
2条回答

你必须找到一种方法将对象ID传递到下一页。想到的选项是把它放在URL中,或者像solarismoke建议的那样在会话中保存它。如果在url中执行,也可以将页面序列放在那里(表示forst表单为1,第二个表单为2…)。在

这种方法的好处是,您可以在一个视图中覆盖所有功能:根据页面设置,在get_object方法中设置相应的字段(自身字段=[..])和get_template_names方法中的模板名称。在

因此,使用Updateview时,它将如下所示:

在网址.py公司名称:

....
url(r'^mysite/(?P<object_no>\d+)/(?P<form_no>\d+)$', BaseView.as_view()),

在视图.py公司名称:

^{pr2}$

你必须确保你的所有字段都可以为空。在

通过自己定义post,您已经覆盖了视图的默认行为。您可以看到没有调用get_context_data或任何其他类方法,因此自然不会调用它们。在

通常不应重写特定的get或post方法。您没有显示完整的视图,因此不清楚您要实现什么行为,但例如在表单视图中,您需要定义success_url来设置提交后表单重定向到的位置。在

相关问题 更多 >