【问题标题】:Access request variable in Django CreateView form_valid method在 Django CreateView form_valid 方法中访问请求变量
【发布时间】:2015-11-21 10:47:21
【问题描述】:

如何访问 form_valid 中的请求?

def redirect_logic_func(request):
   #redirect logic

class CView(CreateView):
    form_class = CForm
    template_name = "c_form.html"

    def form_valid(self, form):
        form.save()
        super(CView, self).form_valid(form)
        return redirect_logic_func(self.request)

self.request.POST 和 request.POST 一样吗?

【问题讨论】:

  • 您遇到的“问题”是什么? self.request.POST in form_valid 应该可以工作。
  • request.POST 和 self.request.POST 一样吗?
  • 我在这里猜测是因为您的问题非常含糊-您正在将self.request.POST 传递给您的redirect_logic_func 方法,该方法需要request;如果在这种方法中你有一行 request.POST 那么这将失败;您可能想要传递完整的请求,例如 return redirect_logic_func(self.request)

标签: python django django-views django-class-based-views


【解决方案1】:
  1. 要访问form_valid() 中的request 变量,只需使用self.request。这将为您提供request 变量。
  2. 不,无需覆盖.post() 即可访问form_valid() 中的request 变量。
  3. 是的,self.request.POSTrequest.POST 相同,因为它们是相同的 request 对象。

因此,您的最终代码应如下所示:

def redirect_logic_func(request):
   #redirect logic

class CView(CreateView):
    form_class = CForm
    template_name = "c_form.html"

    def form_valid(self, form):
        form.save()
        super(CView, self).form_valid(form)
        return redirect_logic_func(self.request) # use self.request

【讨论】:

  • 太好了,我什至在保存模型(我使用 modelForm)之前通过覆盖 form_valid 方法进行了一些自定义
猜你喜欢
  • 2018-04-07
  • 1970-01-01
  • 2015-10-18
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 2021-12-24
相关资源
最近更新 更多