【问题标题】:Django3: ManyToMany field causes: Unknown field(s) (username) specified for User. Check fields/fieldsets/exclude attributes of class CustomUserAdminDjango 3:ManyToManyfield 原因:为用户指定的未知字段(用户名)。检查自定义 UserAdmin 类的字段/字段集/排除属性
【发布时间】:2022-01-18 20:33:30
【问题描述】:

我有一个没有用户名但使用电子邮件的自定义用户模型。

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)

但是,当我进入项目实例的管理视图并尝试添加用户时,我得到:

/admin/user/user/add/ 处的字段错误 为用户指定的未知字段(用户名)。检查类 CustomUserAdmin 的字段/字段集/排除属性。 请求方法:GET 请求网址:http://localhost:8000/admin/user/user/add/?_to_field=id&_popup=1 Django 版本:3.2.11 异常类型:字段错误 异常值:
为用户指定的未知字段(用户名)。检查 CustomUserAdmin 类的字段/字段集/排除属性。

我在设置中添加了我的用户模型作为默认模型,所以我不知道这里的 username 字段来自哪里。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    username 字段仍然是search_fieldsadd_fieldsets 的一部分。因此,您应该删除那里的 username 字段:

    class CustomUserAdmin(UserAdmin):
        list_display = ('email', 'is_staff', 'is_superuser')
        readonly_fields = ('last_login', 'date_joined', 'uuid')
        ordering = ('email',)
        search_fields = ('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',
                    )
                },
            ),
        )
        add_fieldsets = (
            (None, {
                'classes': ('wide',),
                'fields': ('email', 'password1', 'password2'),
                #              ? without username
            }),
        )
    
    
    admin.site.register(User, CustomUserAdmin)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      相关资源
      最近更新 更多