gpt4 book ai didi

django - 在 Django 1.11 中为自定义用户添加额外的字段

转载 作者:行者123 更新时间:2023-12-01 01:44:58 25 4
gpt4 key购买 nike

我有一个自定义用户模型,它是由 AbstractUser 子类化的添加了自定义字段。

# model.py
from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
ADM = 'admin'
MEMBER = 'member'
ROLE_CH = ((ADM, 'Administrator'), (MEMBER, 'Member'))

role = models.CharField(max_length=20, choices=ROLE_CH, blank=True)

此模型也在 settings.py 中注册为默认身份验证模型
# settings.py
AUTH_USER_MODEL = "main.CustomUser"

然后在 admin.py根据 documentation , 我创建了一个自定义表单,它扩展了 UserCreationForm然后将其注册到自定义用户。
# admin.py
from django.contrib import admin
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser

class CustomUserCreationForm(UserCreationForm):

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

class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm

admin.site.register(CustomUser, CustomUserAdmin)

但是,它没有按预期工作。 Add User表单仍然是默认的,即只有 username , passwordpassword confirmation字段存在。 role字段不出现。

最佳答案

使用 form 属性而不是 add_form :

class CustomUserAdmin(ModelAdmin):
form = CustomUserCreationForm

admin.site.register(CustomUser, CustomUserAdmin)

UPD

第一个答案仅适用于 ModelAdmin基类,因为它没有 add_form属性。

对于 UserAdmin你应该更新 add_fieldsets属性:
class CustomUserAdmin(UserAdmin):
add_fieldsets = UserAdmin.add_fieldsets + (
(None, {
'fields': ('role',),
}),
)

admin.site.register(CustomUser, CustomUserAdmin)

在这种情况下,您甚至不需要 add_form .

关于django - 在 Django 1.11 中为自定义用户添加额外的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50583113/

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