将表单字段添加到 django 管理面板中的自定义用户模型

tar*_*lah 3 python django django-admin django-custom-user

我正在阅读django 初学者书籍,\xc2\xa0 测试第 8 章中有关自定义用户模型的代码。目标是age通过对模型进行子类化来在 auth 用户模型中添加该字段AbstractUser

\n\n

首先我们创建CustomUsermodels.py

\n\n
from django.db import models\nfrom django.contrib.auth.models import AbstractUser\n\nclass CustomUser(AbstractUser):\n    age = models.PositiveIntegerField(null=True, blank=True)\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后创建CustomUserCreationFromCustomUserChangeFromforms.py

\n\n
from django import forms\nfrom django.contrib.auth.forms import UserCreationForm, UserChangeForm\n\nfrom .models import CustomUser\n\nclass CustomUserCreationFrom(UserCreationForm):\n    class Meta(UserCreationForm.Meta):\n        model = CustomUser\n        fields = UserCreationForm.Meta.fields + (\'age\',)\n\nclass CustomUserChangeFrom(UserChangeForm):\n    class Meta(UserChangeForm.Meta):\n        model = CustomUser\n        fields = UserChangeForm.Meta.fields\n
Run Code Online (Sandbox Code Playgroud)\n\n

最后,CustomUserAdminadmin.py

\n\n
from django.contrib import admin\nfrom django.contrib.auth.admin import UserAdmin\n\nfrom .forms import CustomUserCreationFrom, CustomUserChangeFrom\nfrom .models import CustomUser\n\nclass CustomUserAdmin(UserAdmin):\n    add_form = CustomUserCreationFrom\n    form = CustomUserChangeFrom\n    model = CustomUser\n    list_display = [\'username\', \'email\', \'age\', \'is_staff\',]\n\nadmin.site.register(CustomUser, CustomUserAdmin)\n
Run Code Online (Sandbox Code Playgroud)\n\n

当然,还要告诉 django 我们的自定义身份验证模型settings.py

\n\n
AUTH_USER_MODEL = \'users.CustomUser\'\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

age以超级用户身份登录,当尝试添加新用户时,创建表单中没有字段。

\n\n

在此输入图像描述

\n\n

我错过了什么吗?

\n

JV *_*eil 5

感谢 Michael Herman 的回答: https://testdriven.io/blog/django-custom-user-model/

在你必须声明一个CustomUserAdminadmin.pyfieldsets

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

from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser


class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ('email', 'is_staff', 'is_active',)
    list_filter = ('email', 'is_staff', 'is_active',)

    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Permissions', {'fields': ('is_staff', 'is_active')}),
    )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2', 'is_staff', 'is_active')}
        ),
    )

    search_fields = ('email',)
    ordering = ('email',)


admin.site.register(CustomUser, CustomUserAdmin)
Run Code Online (Sandbox Code Playgroud)