窗体未在Django admin中保存电子邮件

2024-04-25 04:08:42 发布

您现在位置:Python中文网/ 问答频道 /正文

django表单不在数据库中保存电子邮件。我尝试了各种方法,但它仍然是唯一不保存的东西。我需要帮助 https://i.imgur.com/LJymHeS.png

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


        class UserRegistrationForm(UserCreationForm):
             email=forms.EmailField()

        class meta:
       model=User
          fields=    ['username', 'email_address', 'password1','password2']



views.py code
    register(request):
 if request.method=='POST':
    form=UserRegistrationForm(request.POST)
    if form.is_valid():
        form.save(commit=False)
        username=form.cleaned_data['username']
        password1=form.cleaned_data['password1']
        password2=form.cleaned_data['password2']
        email_address=form.cleaned_data['email']
        form.save()

        return redirect('/')
else:

    form=UserRegistrationForm()
return render(request, 'blog/register.html',{'form':form})

Tags: djangofrompyimportformdataemailrequest
1条回答
网友
1楼 · 发布于 2024-04-25 04:08:42

字段的名称是email而不是email_address。因此,您应将此更改为:

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

class UserRegistrationForm(UserCreationForm):
    email = forms.EmailField()

    class meta:
        model = User
        fields = ['username', 'email']

而且password1pasword2也不是模型字段。UserCreationForm有一些逻辑来比较字段,并设置密码。你知道吗

在您的register视图中,不需要解包清理的数据,您只需使用form.save()。如果要自动登录刚刚创建的用户,可以调用login(request, user)

from django.contrib.auth import login

def register(request):
    if request.method=='POST':
        form = UserRegistrationForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return redirect('/')
    else:
        form = UserRegistrationForm()
    return render(request, 'blog/register.html',{'form':form})

您可以用以下命令覆盖UserAdmin管理:

# blog/admin.py

from blog.forms import UserRegistrationForm

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

admin.site.unregister(User)

@admin.register(User)
class NewUserAdmin(UserAdmin):
    add_form_template = 'blog/register.html'
    add_form = UserRegistrationForm

相关问题 更多 >