【问题标题】:Why does my Django CreateView not recognise form_valid为什么我的 Django CreateView 无法识别 form_valid
【发布时间】:2020-12-02 14:37:09
【问题描述】:

我正在使用 django allauth 模块来创建用户。在 views,py 中,我将 CreateView 子类化,但我无法让 form_valid 工作。它似乎没有被调用(我没有导入 HttpResponseRedirect 但它没有抱怨

class SignupPageView(generic.CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'registration/signup.html'

    def form_valid(self, form):
        print('form_valid')
        return HttpResponseRedirect(self.get_success_url())


    def form_invalid(self, form):
        print('form_invalid') 
        return HttpResponseRedirect(self.get_success_url())

我做错了什么?

编辑

我还添加了 form_invalid,它仍然没有失败。这让我认为某些基本的东西是错误的。

用户注册过程似乎运行正常,没有报告错误

与表单关联的html是

{% extends '_base.html' %}
{% load crispy_forms_tags %}

{% block title %}Sign Up{% endblock title %}
{% block content %}
    <h2>Sign Up</h2>
    <form method="post">
        {% csrf_token %}
        {{ form | crispy }}
        <button type="submit">Sign Up</button>
    </form>
{% endblock content %}

urls.py

urlpatterns = [
    path('signup/', SignupPageView.as_view(), name='signup'),
]

【问题讨论】:

  • 表格有效吗?
  • form_invalid() 中添加打印语句,然后重试。可能您的表单无效,因此执行未达到form_valid() 方法。
  • 问题可能出在您的 URL 模式或模板中。

标签: django django-allauth


【解决方案1】:

CreateView 继承 FormMixin 的方法,form_validform_invalid 都有。因此,您的 CBV 声明没有任何问题。

所以我认为您的表格无效。能否尝试添加form_invalid 方法,看看是否会被调用?

【讨论】:

  • form_invalid 也不被调用
  • 您能否更新您的问题以显示用于调用此视图的 url 模式?
  • 我已经添加了 html 和 urls.py
  • 进入/signup页面看到了什么?
  • 表单有 4 个字段:电子邮件、用户名、密码 1、密码 2。表单按预期工作:正确验证、创建用户并发送电子邮件
猜你喜欢
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 2017-02-12
  • 2021-01-01
  • 2015-11-21
  • 2019-09-02
相关资源
最近更新 更多