【发布时间】:2021-05-16 22:48:47
【问题描述】:
我想在 django 中扩展用户模型,添加新字段,当然还可以通过管理页面对其进行管理。
我在 django 中创建了一个 CustomUser 模型,扩展了 AbstractUser 并添加了一些额外的字段,创建了一个 UserCustomCreateForm 和 UserCustomChangeForm 来管理创建和更改,然后注册了一个 CustomUserAdmin 来扩展 UserAdmin 添加两个表单。
在管理员中,创建新用户时似乎工作正常,但不幸的是新字段没有出现在更改视图上。
我做错了什么?
谢谢
这里是models.py
users/models.py
# Create your models here.
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
# add additional fields in here
address = models.CharField(max_length=50, null=True, verbose_name='Indirizzo')
house_phone = models.CharField(max_length=20, null=True, verbose_name='Telefono')
mobile_phone = models.CharField(max_length=20, null=True, verbose_name='Cellulare')
def __str__(self):
return self.first_name + ' ' + self.last_name
这里是表格
# users/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser
from django import forms
class UserCustomCreateForm(UserCreationForm):
class Meta(UserCreationForm):
model = CustomUser
fields = ('username', 'email', 'first_name', 'last_name',
'address', 'house_phone', 'mobile_phone')
class UserCustomChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = (
'username', 'email', 'first_name', 'last_name',
'address', 'house_phone', 'mobile_phone')
这里是 admin.py
# users/admin.py
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin
from .forms import UserCustomCreateForm, UserCustomChangeForm
from .models import CustomUser
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
class CustomUserAdmin(UserAdmin):
add_form = UserCustomCreateForm
form = UserCustomChangeForm
change_form = UserCustomChangeForm
model = CustomUser
add_fieldsets = (
( "Dati di Accesso", {
'classes': ('wide',),
'fields':('username', 'password1', 'password2',)
}
),
( "Informazioni Personali", {
'classes': ('wide',),
'fields': ( 'email', 'first_name', 'last_name',
'address', 'house_phone', 'mobile_phone')
} ),
)
list_display = ['email', 'username',]
admin.site.register(CustomUser, CustomUserAdmin)
【问题讨论】:
-
我认为您还需要设置
fieldsets,很可能正在使用UserAdmin中的字段集。 -
顶!就是这样,添加了 fieldsets = ( (None, {'fields': ('email', 'password')}), (_('Personal info'), {'fields': ('first_name', 'last_name' , 'address', 'house_phone', 'mobile_phone')}), (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions') }), (_('Important dates'), {'fields': ('last_login', 'date_joined')}), ) 在 CustomUserAdmin 中工作正常。非常感谢