问题描述
我在 Django 中使用普通用户模型来保存我的用户。我想添加 first_name 和 last_name 字段,但我不知道如何扩展我的模型并使其工作。名字和姓氏应该在注册表中添加(我使用的是脆皮形式)。
注册查看
if request.method == "POST":
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save() # save user to database
username = form.cleaned_data.get('username')
messages.success(request,f"User {username} succesfully created! You can login Now!")
return redirect('login')
else:
form = UserRegisterForm()
return render(request,'users/register.html',{'form': form})
注册表
def __init__(self,*args,**kwargs):
super(UserRegisterForm,self).__init__(*args,**kwargs)
self.fields['password1'].label = "Hasło"
self.fields['password2'].label = "Powtórz hasło"
email = forms.EmailField()
name = forms.CharField(
label="Imię",required=True,max_length=30,)
surname = forms.CharField(
label="Nazwisko",)
class Meta:
model = User
fields = ['username','email','password1','password2','name','surname']
labels = {
'username': 'Nazwa użytkownika',}
解决方法
Django 的 User
model [Django-doc] 已经有 first_name
和 last_name
,您可以子类化 UserCreationForm
并为 first_name
和 last_name
添加字段:
from django.contrib.auth.forms import UserCreationForm
class UserRegisterForm(UserCreationForm):
def __init__(self,*args,**kwargs):
super(UserRegisterForm,self).__init__(*args,**kwargs)
self.fields['password1'].label = 'Hasło'
self.fields['password2'].label = 'Powtórz hasło'
email = forms.EmailField()
first_name = forms.CharField(
label='Imię',required=True,max_length=30,)
last_name = forms.CharField(
label='Nazwisko',)
class Meta:
model = User
fields = ['username','email','password1','password2','first_name','last_name']
labels = {
'username': 'Nazwa użytkownika',}