这是字段集中的重复字段
Posted
技术标签:
【中文标题】这是字段集中的重复字段【英文标题】:here are duplicate field(s) in fieldsets 【发布时间】:2019-04-10 11:16:55 【问题描述】:此类引发系统检查 django 错误。它引发的具体错误如下所示。我查看了以前的帖子,这些帖子表明这是由于迁移到 django 2.1 并在字段元组末尾添加逗号修复它导致的错误。这对我不起作用。任何帮助将不胜感激。
SystemCheckError: System check identified some issues:
ERRORS:
<class 'app.admin.user.UserAdmin'>: (admin.E012) There are duplicate field(s) in 'fieldsets[1][1]'.
<class 'app.admin.user.UserAdmin'>: (admin.E012) There are duplicate field(s) in 'fieldsets[2][1]'.
<class 'app.admin.user.UserAdmin'>: (admin.E012) There are duplicate field(s) in 'fieldsets[3][1]'.
@register(User)
class UserAdmin(ModelAdmin):
fieldsets = (
(None, 'fields': ('email', 'password',)),
('Personal info',
'fields': ('first_name', 'last_name', 'email',)),
('Permissions', 'fields': ('is_active', 'is_staff', 'is_superuser',
'groups', 'user_permissions',)),
('Important dates', 'fields': ('last_login', 'date_joined',))
)
add_fieldsets = (
(None,
'classes': ('wide',),
'fields': ('email', 'password1', 'password2',),
),
)
list_display = ('email', 'first_name', 'last_name', 'username', 'is_staff')
list_filter = ('is_staff', 'is_superuser', 'is_active', 'groups',)
search_fields = ('email', 'first_name', 'last_name',)
ordering = ('email',)
filter_horizontal = ('groups', 'user_permissions',)
【问题讨论】:
您有两次email
字段。删除一个有帮助吗?
【参考方案1】:
我遇到了完全相同的错误,虽然“电子邮件”似乎在每个元组中都是唯一的,但它必须在“字段集”的所有元组中都是唯一的。
(None, 'fields': ('email', 'password',))
您是说“电子邮件”是一个基本字段,并且
('Personal info', 'fields': ('first_name', 'last_name', 'email',))
是说“电子邮件”是一个“个人信息”字段。你必须选择。
删除第二个是解决方案,正如@Selcuk 建议的那样。
【讨论】:
【参考方案2】:正如@Selcuk 和@andramos 已经建议的那样,您两次提到'email'
。看看你的fieldsets
:
第一个:
(None, 'fields': ('email', 'password',)),
^^^
第二个:
('Personal info', 'fields': ('first_name', 'last_name', 'email',)),
^^^
在您的情况下,从 'Personal info'
中删除 'email'
将解决您的问题:
fieldsets = (
(None, 'fields': ('email', 'password',)),
('Personal info',
'fields': ('first_name', 'last_name',)),
('Permissions', 'fields': ('is_active', 'is_staff', 'is_superuser',
'groups', 'user_permissions',)),
('Important dates', 'fields': ('last_login', 'date_joined',))
)
add_fieldsets = (
(None,
'classes': ('wide',),
'fields': ('email', 'password1', 'password2',),
),
)
official document 中有一个有用的示例来自定义用户模型、用户表单和用户管理员。
例如,MyUser
模型被定义为优先使用 email
字段而不是 username
:
class MyUser(AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
date_of_birth = models.DateField()
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['date_of_birth']
在admin.py
文件中:
class UserAdmin(BaseUserAdmin):
# The forms to add and change user instances
form = UserChangeForm
add_form = UserCreationForm
# The fields to be used in displaying the User model.
# These override the definitions on the base UserAdmin
# that reference specific fields on auth.User.
list_display = ('email', 'date_of_birth', 'is_admin')
list_filter = ('is_admin',)
fieldsets = (
(None, 'fields': ('email', 'password')),
('Personal info', 'fields': ('date_of_birth',)),
('Permissions', 'fields': ('is_admin',)),
)
# add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
# overrides get_fieldsets to use this attribute when creating a user.
add_fieldsets = (
(None,
'classes': ('wide',),
'fields': ('email', 'date_of_birth', 'password1', 'password2'),
),
)
search_fields = ('email',)
ordering = ('email',)
filter_horizontal = ()
【讨论】:
以上是关于这是字段集中的重复字段的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB:如何对 MySQL 字段关键字等结果中的记录进行排序 [重复]