这是字段集中的重复字段

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 = ()

【讨论】:

以上是关于这是字段集中的重复字段的主要内容,如果未能解决你的问题,请参考以下文章

多对多字段上的 order_by 导致查询集中的重复条目

MongoDB:如何对 MySQL 字段关键字等结果中的记录进行排序 [重复]

MongoDB:如何对 MySQL 字段关键字等结果中的记录进行排序 [重复]

JSON 响应中的重复字段

如何使用 C# 删除数据表中的重复条目? [复制]

Django Newbie - 使用多字段表单,如何消除查询集中的空字段