用户模型 Django 中的自定义字段

问题描述

我在 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_namelast_name,您可以子类化 UserCreationForm 并为 first_namelast_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',}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...