【问题标题】:Addig form fields to a custom user model in django admin panel在 django 管理面板中将表单字段添加到自定义用户模型
【发布时间】:2019-06-17 21:50:36
【问题描述】:

我正在浏览 django for beginners book,测试第 8 章中关于 Custom user model 的代码。目标是通过继承 AbstractUser 模型在 auth 用户模型中添加字段 age

首先我们在models.py中创建CustomUser

from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    age = models.PositiveIntegerField(null=True, blank=True)

然后在forms.py中创建CustomUserCreationFromCustomUserChangeFrom

from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm

from .models import CustomUser

class CustomUserCreationFrom(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        model = CustomUser
        fields = UserCreationForm.Meta.fields + ('age',)

class CustomUserChangeFrom(UserChangeForm):
    class Meta(UserChangeForm.Meta):
        model = CustomUser
        fields = UserChangeForm.Meta.fields

最后,admin.py 中的 CustomUserAdmin

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

from .forms import CustomUserCreationFrom, CustomUserChangeFrom
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationFrom
    form = CustomUserChangeFrom
    model = CustomUser
    list_display = ['username', 'email', 'age', 'is_staff',]

admin.site.register(CustomUser, CustomUserAdmin)

当然还有告诉 django 我们在 settings.py 中的自定义身份验证模型:

AUTH_USER_MODEL = 'users.CustomUser'

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

我错过了什么吗?

【问题讨论】:

  • 您是否尝试在管理员的 list_display 中添加您的字段“年龄”?
  • @NitinPawar 是的,在CustomUserAdmin(UserAdmin 的子类)中,我在 list_display 中添加了年龄
  • 哦,是的。忽略了它。

标签: python django django-admin django-custom-user


【解决方案1】:

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

CustomUserAdminadmin.py 中你必须声明一个fieldsets

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2019-12-12
    相关资源
    最近更新 更多