【问题标题】:Custom fields in user model Django用户模型 Django 中的自定义字段
【发布时间】:2021-04-15 00:41:43
【问题描述】:

我在 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",
        required=True,
        max_length=30,
    )

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2', 'name', 'surname']
        labels = {
            'username': 'Nazwa użytkownika',
        }

【问题讨论】:

  • Django 的User 模型已经有first_namelast_namee

标签: python django forms django-crispy-forms


【解决方案1】:

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',
        required=True,
        max_length=30,
    )

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2', 'first_name', 'last_name']
        labels = {
            'username': 'Nazwa użytkownika',
        }

【讨论】:

    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 2011-04-08
    • 2013-07-02
    • 2021-12-08
    • 2019-08-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多