如何在 signup_form.html 中添加电子邮件地址 - Django-crispy-forms

How to add email address in signup_form.html - Django-crispy-forms

我的signup_form.html如下,请问有什么办法可以在不改变后端代码views.py的情况下,在这个表单中添加一个email地址吗?,我想让用户填写email他注册时的地址,

{% extends 'base.html' %}

{% load crispy_forms_tags %}

{% block content %}
  <div class="row">
    <div class="col-md-8 col-sm-10 col-12">
      <form method="post" novalidate>
        {% csrf_token %}
        <input type="hidden" name="next" value="{{ next }}">
        {{ form|crispy }}
        <button type="submit" class="btn btn-success">Sign up</button>
      </form>
    </div>
  </div>
{% endblock %}

如果您使用标准内置的 Django 注册表单 - 您可以像这样覆盖它:

from django.contrib.auth.forms import UserCreationForm

class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True,
                         label='Email',
                         error_messages={'exists': 'Oops'})

    class Meta:
        model = User
        fields = ("username", "email", "password1", "password2")


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

    def clean_email(self):
        if User.objects.filter(email=self.cleaned_data['email']).exists():
            raise ValidationError(self.fields['email'].error_messages['exists'])
        return self.cleaned_data['email']

接下来我想如果你说你没有注册视图(如果我理解正确的话)——你的网址中有类似的字符串:

from django.views.generic.edit import CreateView
from django.contrib.auth.forms import UserCreationForm

    urlpatterns = [
        path('register/', CreateView.as_view(
                template_name='register.html',
                form_class=UserCreationForm,
                success_url='/')
    ]

因此您只需将 UserCreationForm 替换为您自定义的 UserCreateForm 即可。