django中的用户类型

问题描述 投票:0回答:1

在我的Web应用程序中,用户属于客户或公司。我尝试实现这一点:

class User(AbstractBaseUser, PermissionsMixin):
    username = None
    email = models.EmailField(max_length=255, unique=True)
    client = models.ForeignKey('client.Client', null=True, blank=True, on_delete=models.CASCADE)
    company = models.ForeignKey('company.Company', null=True, blank=True, on_delete=models.CASCADE)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    @property
    def is_staff(self):
        return self.is_admin

    @property
    def is_company(self):
        if self.company:
            return True

        return False

    @property
    def is_client(self):
        if self.company:
            return True

        return False

    def save(self, *args, **kwargs):
        if self.client and self.company:
            raise ValidationError("Test")

        super(User, self).save(*args, **kwargs)

我需要这些差异,因为公司可以维持多个客户,而一个客户和一个公司可以拥有多个用户。

但是那是实现此目标的最佳方法吗?我读到我无法在Django中创建多个用户类,因此我只能在一个用户类中实现此功能。

在我的Web应用程序中,用户属于客户或公司。我尝试这样实现:类User(AbstractBaseUser,PermissionsMixin):用户名=无电子邮件= models.EmailField(max_length = ...

django django-models django-users
1个回答
0
投票

您的代码imo看起来还不错,有点匹配关于如何从此处使用django创建角色的最佳(imo)教程:https://simpleisbetterthancomplex.com/tutorial/2018/01/18/how-to-implement-multiple-user-types-with-django.html另一方面,您实际上可以通过创建单独的模型和授权来自己制作所有内容-要做很多工作,但是您将可以控制所有内容。

© www.soinside.com 2019 - 2024. All rights reserved.