如何从内置身份验证实现的用户表单中保存数据。用户在 Django 中使用 UserCreationForm?
How to save data from the User form that is implemented by built-in auth. User using UserCreationForm in Django?
您好,我是 Django 的新手,我创建了一个 login/logout 模型 Django 内置用户和 UserCreationForm。它工作正常,但我的问题是我在我的表单中定义了两个自定义输入,当我 运行 服务器时它显示在网页上但是当我在管理员下检查用户时,我只看到详细信息用户定义的字段不是我的自定义字段。
如何将它的数据保存到我的用户模型中?
或者如果我错误地定义了自定义字段,我该如何更改它以便我可以将它的数据保存在我的模型中。
我的自定义字段(地址和 phone 号码未显示在管理员用户中,其数据未保存。
model.py
from django.db import models
from django.contrib import auth
# Create your models here.
class User(auth.models.User,auth.models.PermissionsMixin):
def __str__(self):
return "@{}".format(self.username)
forms.py
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
from django import forms
class UserCreateform(UserCreationForm):
address = forms.CharField(max_length=150, required=True)
phone_number = forms.IntegerField(required=True)
class Meta(UserCreationForm.Meta):
model = get_user_model()
fields = ('username','email','password1','password2')
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.fields['username'].label = 'Display Name'
views.py
from django.shortcuts import render
from django.urls import reverse_lazy
from django.views.generic import CreateView
from . import forms
# Create your views here.
class SignUp(CreateView):
form_class = forms.UserCreateform
success_url = reverse_lazy('login')
template_name = 'account/signup.html'
如果字段不是 Model
的字段,则将字段添加到 ModelForm
并不会保存它们。所以当然,address
和 phone_number
不会保存,您的 User
模型没有这些字段。
您需要 Model
才能保存这些字段。如here所述,您有两个选择:
- 创建一个
Profile
模型来保存所有额外字段
- 创建自定义
User
模型,继承 AbstractUser
或 AbstractBaseUser
。
我的建议:两者都做。将您的额外字段保存在 Profile
模型中。
和 子类 AbstractUser
,因此您可以选择向 User
模型添加有用的方法和属性(现在,只是 __str__()
)。
为什么不只是子类化?因为随着您的应用程序的增长,您会想要向用户的个人资料中添加更多内容。也许您想创建不同类型的配置文件,例如私人资料和专业资料。 User
本身应该是紧凑的,只管理身份验证和权限。
注意:您当前的User
模型错误。您 不能 子类 auth.User
而是 auth.AbstractUser
.
您好,我是 Django 的新手,我创建了一个 login/logout 模型 Django 内置用户和 UserCreationForm。它工作正常,但我的问题是我在我的表单中定义了两个自定义输入,当我 运行 服务器时它显示在网页上但是当我在管理员下检查用户时,我只看到详细信息用户定义的字段不是我的自定义字段。
如何将它的数据保存到我的用户模型中? 或者如果我错误地定义了自定义字段,我该如何更改它以便我可以将它的数据保存在我的模型中。
我的自定义字段(地址和 phone 号码未显示在管理员用户中,其数据未保存。
model.py
from django.db import models
from django.contrib import auth
# Create your models here.
class User(auth.models.User,auth.models.PermissionsMixin):
def __str__(self):
return "@{}".format(self.username)
forms.py
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
from django import forms
class UserCreateform(UserCreationForm):
address = forms.CharField(max_length=150, required=True)
phone_number = forms.IntegerField(required=True)
class Meta(UserCreationForm.Meta):
model = get_user_model()
fields = ('username','email','password1','password2')
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.fields['username'].label = 'Display Name'
views.py
from django.shortcuts import render
from django.urls import reverse_lazy
from django.views.generic import CreateView
from . import forms
# Create your views here.
class SignUp(CreateView):
form_class = forms.UserCreateform
success_url = reverse_lazy('login')
template_name = 'account/signup.html'
如果字段不是 Model
的字段,则将字段添加到 ModelForm
并不会保存它们。所以当然,address
和 phone_number
不会保存,您的 User
模型没有这些字段。
您需要 Model
才能保存这些字段。如here所述,您有两个选择:
- 创建一个
Profile
模型来保存所有额外字段 - 创建自定义
User
模型,继承AbstractUser
或AbstractBaseUser
。
我的建议:两者都做。将您的额外字段保存在 Profile
模型中。
和 子类 AbstractUser
,因此您可以选择向 User
模型添加有用的方法和属性(现在,只是 __str__()
)。
为什么不只是子类化?因为随着您的应用程序的增长,您会想要向用户的个人资料中添加更多内容。也许您想创建不同类型的配置文件,例如私人资料和专业资料。 User
本身应该是紧凑的,只管理身份验证和权限。
注意:您当前的User
模型错误。您 不能 子类 auth.User
而是 auth.AbstractUser
.