Django 3:ManyToManyfield 原因:为用户指定的未知字段(用户名)。检查 class 自定义 UserAdmin 的 fields/fieldsets/exclude 属性
Django3: ManyToMany field causes: Unknown field(s) (username) specified for User. Check fields/fieldsets/exclude attributes of class CustomUserAdmin
我有一个没有用户名的自定义用户模型,而是使用电子邮件。
class User(AbstractUser):
username = None
email = models.EmailField(_("email address"), unique=True)
uuid = models.CharField(max_length=36, default=uuid4, unique=True)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
objects = CustomUserManager()
def __str__(self):
return self.email
以及具有多个用户的项目模型:
from user.models import User
class Project(models.Model):
project_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=256, unique=True, blank=False)
created = models.DateTimeField(auto_now_add=True)
description = models.TextField(max_length=10000, default="")
slug = models.SlugField(max_length=256, unique=True)
created_by = CurrentUserField(related_name='creator')
users = models.ManyToManyField(User, related_name='users')
....
我的 UserAdmin 模型如下所示:
class CustomUserAdmin(UserAdmin):
list_display = ("email", "is_staff", "is_superuser")
readonly_fields = ("last_login", "date_joined", "uuid")
ordering = ("email",)
fieldsets = (
(
"Fields",
{
"fields": (
"email",
"uuid",
"date_joined",
"last_login",
"is_active",
"is_staff",
"is_superuser",
"groups",
"user_permissions",
"password",
)
},
),
)
admin.site.register(User, CustomUserAdmin)
但是,当我转到项目实例的管理视图并尝试添加用户时,我得到:
FieldError at /admin/user/user/add/
Unknown field(s) (username) specified for User. Check fields/fieldsets/exclude attributes of class CustomUserAdmin.
Request Method: GET
Request URL: http://localhost:8000/admin/user/user/add/?_to_field=id&_popup=1
Django Version: 3.2.11
Exception Type: FieldError
Exception Value:
Unknown field(s) (username) specified for User. Check fields/fieldsets/exclude attributes of class CustomUserAdmin.
我在设置中添加了我的用户模型作为默认模型,所以我不知道这里的用户名字段来自哪里。
username
字段仍然是 search_fields
和 add_fieldsets
的一部分。因此,您应该删除那里的 username
字段:
class CustomUserAdmin(UserAdmin):
list_display = ('email', 'is_staff', 'is_superuser')
readonly_fields = ('last_login', 'date_joined', 'uuid')
ordering = ('email',)
<strong>search_fields</strong> = ('first_name', 'last_name', 'email') # 🖘 no username
fieldsets = (
(
'Fields',
{
'fields': (
'email',
'uuid',
'date_joined',
'last_login',
'is_active',
'is_staff',
'is_superuser',
'groups',
'user_permissions',
'password',
)
},
),
)
<strong>add_fieldsets</strong> = (
(None, {
'classes': ('wide',),
'fields': (<strong>'email'</strong>, 'password1', 'password2'),
# 🖞 without username
}),
)
admin.site.register(User, CustomUserAdmin)
我有一个没有用户名的自定义用户模型,而是使用电子邮件。
class User(AbstractUser):
username = None
email = models.EmailField(_("email address"), unique=True)
uuid = models.CharField(max_length=36, default=uuid4, unique=True)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
objects = CustomUserManager()
def __str__(self):
return self.email
以及具有多个用户的项目模型:
from user.models import User
class Project(models.Model):
project_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=256, unique=True, blank=False)
created = models.DateTimeField(auto_now_add=True)
description = models.TextField(max_length=10000, default="")
slug = models.SlugField(max_length=256, unique=True)
created_by = CurrentUserField(related_name='creator')
users = models.ManyToManyField(User, related_name='users')
....
我的 UserAdmin 模型如下所示:
class CustomUserAdmin(UserAdmin):
list_display = ("email", "is_staff", "is_superuser")
readonly_fields = ("last_login", "date_joined", "uuid")
ordering = ("email",)
fieldsets = (
(
"Fields",
{
"fields": (
"email",
"uuid",
"date_joined",
"last_login",
"is_active",
"is_staff",
"is_superuser",
"groups",
"user_permissions",
"password",
)
},
),
)
admin.site.register(User, CustomUserAdmin)
但是,当我转到项目实例的管理视图并尝试添加用户时,我得到:
FieldError at /admin/user/user/add/ Unknown field(s) (username) specified for User. Check fields/fieldsets/exclude attributes of class CustomUserAdmin. Request Method: GET Request URL: http://localhost:8000/admin/user/user/add/?_to_field=id&_popup=1 Django Version: 3.2.11 Exception Type: FieldError Exception Value:
Unknown field(s) (username) specified for User. Check fields/fieldsets/exclude attributes of class CustomUserAdmin.
我在设置中添加了我的用户模型作为默认模型,所以我不知道这里的用户名字段来自哪里。
username
字段仍然是 search_fields
和 add_fieldsets
的一部分。因此,您应该删除那里的 username
字段:
class CustomUserAdmin(UserAdmin):
list_display = ('email', 'is_staff', 'is_superuser')
readonly_fields = ('last_login', 'date_joined', 'uuid')
ordering = ('email',)
<strong>search_fields</strong> = ('first_name', 'last_name', 'email') # 🖘 no username
fieldsets = (
(
'Fields',
{
'fields': (
'email',
'uuid',
'date_joined',
'last_login',
'is_active',
'is_staff',
'is_superuser',
'groups',
'user_permissions',
'password',
)
},
),
)
<strong>add_fieldsets</strong> = (
(None, {
'classes': ('wide',),
'fields': (<strong>'email'</strong>, 'password1', 'password2'),
# 🖞 without username
}),
)
admin.site.register(User, CustomUserAdmin)