gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:14 25 4
gpt4 key购买 nike

我正在浏览 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)

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

AUTH_USER_MODEL = 'users.CustomUser'
<小时/>

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

enter image description here

我错过了什么吗?

最佳答案

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

admin.pyCustomUserAdmin 中,您必须声明一个 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)

关于python - 将表单字段添加到 django 管理面板中的自定义用户模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54341927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com