【问题标题】:Django CreateView don't call form_valid neither form_invalid or post()Django CreateView 既不调用 form_valid 也不调用 form_invalid 或 post()
【发布时间】:2016-10-13 16:48:54
【问题描述】:

我有一个 CBV:

class Publish(CreateView):
    success_url = '/'
    template_name = "article/publish.html"
    form_class = ArticlePublish
    model = Article

    def get(self, request, *args, **kwargs):
        print('ee')
        return super(Publish, self).get(request)
    def post(self, request, *args, **kwargs):
        print('jj')
        return super(Publish, self).post(request)
    def form_valid(self, form):
        print('dd')
        form.instance.author = User.objects.get(id=self.request.user.id)
        return super(Publish, self).form_valid(form)
    def form_invalid(self, form):
        print('cc')
        return super(Publish, self).form_invalid(form)

当我提交此表单时:

class ArticlePublish(forms.ModelForm):
    class Meta:
    model = Article
    fields = ['title', 'synopsis', 'content']

使用以下 HTML:

<form action="" method='POST'>
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Save" />
</form>

我明白了:

[13/Oct/2016 16:33:53] "GET /publish/ HTTP/1.1" 200 591
ee
[13/Oct/2016 16:33:56] "POST /publish/ HTTP/1.1" 200 591
ee

所以似乎即使使用 post,使用正确的 modelForm 仍然不调用 form_valid 或 form_invalid 方法。甚至 post 方法也不会被调用。

有人知道发生了什么吗?

【问题讨论】:

  • 发布您的 urls.py。您还使用任何中间件吗?
  • 不在工作,所以没有代码,但是是的,我添加了一个中间件,将 login_form 放入请求中。

标签: django


【解决方案1】:

post 方法和 get 方法的 super 调用应该包括 *args 和 **kwargs:

return super(Publish, self).post(request,*args,**kwargs)

这将传递其他信息,包括表单数据。

【讨论】:

    【解决方案2】:

    实际上是我创建的中间件导致了这种情况。 谢谢。

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多