0

我去测试用户注册,但它一直告诉我UNIQUE constraint failed: users_customuser.email。那是因为电子邮件没有与表单的其余部分一起保存。我用检查员检查了数据库,它显示了一个空白的电子邮件字段。我之前放了一个调试打印form.save,它显示了用户名电子邮件和密码,所以我知道电子邮件在表单数据中。视图看起来不错,所以对我来说没有意义。尝试切换到 django 2.2 并没有帮助。表单有效,但电子邮件未保存。

视图.py

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('home')
    else:
        form = SignUpForm()
    return render(request, 'user_accounts/signup.html', {'form': form})

表格.py

class SignUpForm(UserCreationForm):
    email = forms.EmailField(max_length=254, help_text='Enter a valid email address')
    class Meta:
        model = CustomUser
        fields = ('username', 'password1', 'password2')

注册.html

{% block content %}
  <h2>Sign up</h2>
  <form method="post">
    {% csrf_token %}
    {% for field in form %}
      <p>
        {{ field.label_tag }}<br>
        {{ field }}
        {% if field.help_text %}
          <small style="color: grey">{{ field.help_text }}</small>
        {% endif %}
        {% for error in field.errors %}
          <p style="color: red">{{ error }}</p>
        {% endfor %}
      </p>
    {% endfor %}
    <button type="submit">Sign up</button>
  </form>
{% endblock %}
4

1 回答 1

0

我将其更改forms.py为以下

表格.py

class SignUpForm(UserCreationForm):
    # Deleted extra email field
    class Meta:
        model = CustomUser
        fields = ('email', 'username', 'password1', 'password2') # <-- Added 'email'
于 2019-12-17T15:34:50.347 回答