python - 使用自定义用户模型时缺少组和权限分配

标签 python django django-permissions django-custom-user

我正在构建一个具有通过 Django Groups 定义的多个角色的应用程序。 我从一个自定义用户模型开始,定义如下。

我发现在使用自定义用户模型时使用的组和权限存在奇怪的差异,就像继承缺失了一些东西。

我想使用自定义用户模型,所以我不使用用户名,但我的应用程序中还需要多个组和权限。

from django.db import models
from django.contrib.auth.models import AbstractUser, AbstractBaseUser, BaseUserManager, PermissionsMixin
import random
import string
from slugify import slugify


# Create your models here.

class MyAccountManager(BaseUserManager):
    def create_user(self, email, password=None):
        if not email:
            raise ValueError("You must have an email address")
        user = self.model(
            email=self.normalize_email(email),
        )
        user.set_password(password)
        user.save(using=self._db)
        return user
    
    def create_superuser(self, email, password):
        user = self.create_user(
            email=self.normalize_email(email),
        )
        user.set_password(password)
        user.is_admin=True
        user.is_staff=True
        user.is_superuser=True
        user.save(using=self._db)
        return user


#custom user account model
class User_Account(AbstractUser):
    email = models.EmailField(verbose_name='email', max_length=60, unique = True)
    date_joined = models.DateTimeField(verbose_name="Date Joined", auto_now_add=True)
    last_login = models.DateTimeField(verbose_name="Last Login", auto_now=True)
    username = models.CharField(max_length=100, null=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []
    
    objects = MyAccountManager()

    def __str__(self):
        return self.email

当我使用自定义用户模型创建新组时,该组会自动分配给所有已创建的用户。我以编程方式和通过 Django Admin 重现了这种行为。 当我使用默认用户模型时,组创建不会自动将组分配给所有用户。 我还发现,当使用自定义用户模型时,用户的 Django Admin 是不一样的(组和权限分配字段不完整 - 下面的屏幕截图) Weird incomplete Django Admin interface with groups and permissions missing the available fields

Normal Django Admin interface with group and permission assignment as expected - default user model

最佳答案

我设法在管理面板中解决了这个问题。看来是Admin类错误导致的视觉渲染问题。

错误是由以下原因引起的:

    filter_horizontal = ()
    list_filter = ()
    fieldsets = ()

我实际上已经在上面的类中添加了正确的参数,但忘记注释掉/删除这些行。注释掉后可以正常工作。

关于python - 使用自定义用户模型时缺少组和权限分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62871961/

相关文章:

python - 基于 INSTALLED_APPS Django 在 urls.py 中导入 url

Python psycopg2 检查行是否存在

python - 基于另一个 M2M 预填充 Django M2M 字段

Django 模型中的多态性

rest - 如何使用不同的端点集动态创建权限组 Django Rest Framework

Django 权限

python - 寻找任意矩阵 n*n 的上/下三角形式 - python

python - SQLAlchemy 引发 None,导致 TypeError

python - 在非父模型的内联表单集中更改模型字段的查询集

Django - 向管理员显示不同的模板