【问题标题】:Django UserCreationForm with custom form not working带有自定义表单的 Django UserCreationForm 不起作用
【发布时间】:2021-01-16 15:19:45
【问题描述】:
I have a custom template where you have to put (first_name, last_name, email, password1, password2) for registration --> no username. I tried to use CserCreationForm in the below form but it is not workin, at the end after feeding up the form with data, nothing happens by clicking on submit. Could you please advice where is the problem? Thanks in advance guys! 

forms.py - 我创建了继承自 USerCreationForm 的 SignUpForm,因此我需要占位符__init_ 方法

class SignUpForm(UserCreationForm):

    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'username', 'email', 'password1', 'password2', )

    def __init__(self, *args, **kwargs):
        super(SignUpForm, self).__init__(*args, **kwargs)
        self.fields['first_name'].widget.attrs['placeholder'] = 'Imie'
        self.fields['last_name'].widget.attrs['placeholder'] = 'Nazwisko'
        self.fields['email'].widget.attrs['placeholder'] = 'Email'
        self.fields['password1'].widget.attrs['placeholder'] = 'Hasło'
        self.fields['password2'].widget.attrs['placeholder'] = 'Powtórz Hasło'


    def save(self, commit=True):
        user = super(SignUpForm, self).save(commit=False)
        user.first_name = self.cleaned_data["first_name"]
        user.last_name = self.cleaned_data["last_name"]
        user.username = self.cleaned_data["first_name"]
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

views.py - 这里我使用的是 django 提供的:)

class RegisterView(CreateView):
   form_class = SignUpForm
   template_name = "register.html"
   success_url = "login"

模板:我有一个模板,其中有几个字段要填写,如顶部所述,因此我没有使用简单的 {{form.as_table},并且用户名不是强制性名称,它应该是和名字一样

{% extends 'base.html' %}
{% block content %}
{% load static %}
  <body>
  {% block header %} {% endblock %}
  {% block slogan %} {% endblock %}
    <section id = "register" class="login-page">
      <h2>Załóż konto</h2>
      <form method="POST" action="">
        {% csrf_token %}
        <div class="form-group">
            {{form.first_name}}
        </div>
         <div class="form-group">
            {{form.last_name}}
        </div>
        <div class="form-group">
            {{form.email}}
        </div>
        <div class="form-group">
            {{form.password1}}
        </div>
        <div class="form-group">
            {{form.password2}}
        </div>
        <div class="form-group form-group--buttons">
          <a href="login.html" class="btn btn--without-border">Zaloguj się</a>
          <button class="btn" type="submit">Załóż konto</button>
        </div>
      </form>
    </section>
  </body>
{% endblock %}

urls.py

  path('register/', RegisterView.as_view(), name = "register")

【问题讨论】:

  • 我认为您不需要在保存方法中手动设置 first_name 等。但是您应该在此保存方法中加密密码,例如:user.set_password(self.cleaned_data["password1"])

标签: django-forms django-registration


【解决方案1】:

'password2' 后面多了一个逗号。 元类: 模型 = 用户 fields = ('first_name', 'last_name', 'username', 'email', 'password1', 'password2', )

无论如何,您应该将您调用的函数的名称放在表单的操作中。 应该是这样的。

 <section id = "register" class="login-page">
  <h2>Załóż konto</h2>
  <form method="POST" action="{% url 'login'%}">
    {% csrf_token %}

【讨论】:

  • 嗨 fukurowl,感谢您用逗号提示,但它没有帮助,点击提交后仍然没有任何反应,我将操作留空,因为我不想被重定向到登录页面如果用户没有创建,但我知道你的意思。无论如何,谢谢,我仍在努力解决我的代码问题。
猜你喜欢
  • 2011-08-10
  • 2018-06-11
  • 1970-01-01
  • 2016-03-13
  • 2014-03-01
  • 2011-07-07
  • 2012-02-28
  • 2021-06-22
相关资源
最近更新 更多