簡體   English   中英

如何擴展 UserCreationForm 以包含電子郵件字段

[英]How do I extend UserCreationForm to include email field

我設法讓標准的用戶創建表單工作。 其中僅包括用戶名、密碼 1 和密碼 2 字段。 但是,當我嘗試包含電子郵件字段時,它永遠不會出現在我的模板中。 我想我可能遺漏了一些東西。 這是我的代碼:

表格.py

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

class UserCreationForm(UserCreationForm):
    email = forms.EmailField(required=True)

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

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

視圖.py

from django.contrib.auth.forms import UserCreationForm 

def register_user(request):
if request.method == 'POST':
    form = UserCreationForm(request.POST)
    if form.is_valid():
        form.save()
        return HttpResponseRedirect('/')

args = {}
args.update(csrf(request))

args['form'] = UserCreationForm()

return render_to_response('stories/register.html', args)

注冊.html

<form action = "/register/" method = "POST"> 
    {% csrf_token %} 

    <p>
    {{ form.username.label_tag }}
    {{ form.username}}
    </p>

    <p> 
    {{ form.email.label_tag }}
    {{ form.email }}
    </p>

    <p>
    {{ form.password1.label_tag }}
    {{ form.password1 }}
    </p>

    <p>
    {{ form.password2.label_tag }}
    {{ form.password2 }}
    </p>

    <input type = "submit" value = "register" />
</form>

此文件中的所有字段都將呈現到視圖中,但電子郵件字段除外

誰能看出為什么?!

您在 views.py 中導入了錯誤的UserCreationForm 您應該導入自己的表單而不是 Django 的表單:

故事/視圖.py

from stories.forms import UserCreationForm
...

除此之外,您不必用<p></p>單獨包裝所有字段,因為此作業存在form.as_p()

注冊.html

<form action = "/register/" method = "POST">{% csrf_token %}
    {{ form.as_p }}
</form>

希望這可以幫助。

我是 django 的新手,我嘗試了你發布的內容,但我不得不改變工作......這就是我所做的。

表格.py

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User


class UserCreationForm(UserCreationForm):
    email = forms.EmailField(required=True, label='Email')

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

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

視圖.py

from .forms import UserCreationForm
from django.urls import reverse_lazy
from django.views import generic


class SignUp(generic.CreateView):
    form_class = UserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'accounts/signup.html'

注冊.html

{% extends 'polls/base.html' %}
{% load bootstrap4 %}
{% load static %}
{% block content %}
<body class="body_login">
  <form method="post" class="form-signup">
    {% csrf_token %}
    {% bootstrap_form form  %}
    <button type="submit" class="save btn btn-dark">Sign up</button>
  </form>
</body>
{% endblock %}

表格.py

from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

class SignupForm(UserCreationForm):
    class Meta:
        model = User
        fields = ("username", "email",)

視圖.py

from django.urls import reverse_lazy
from django.views import generic
from accounts.forms import SignupForm

class SignUpView(generic.CreateView):
    form_class = SignupForm
    success_url = reverse_lazy('login')
    template_name = 'stories/register.html'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM