首页 > 解决方案 > 带有自定义表单的 Django UserCreationForm 不起作用

问题描述

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},并且用户名不是强制性名称,它应该与first_name相同

{% 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 %}

网址.py

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

标签: django-formsdjango-registration

解决方案


'password2' 后面多了一个逗号。元类:模型=用户字段=('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 %}

推荐阅读