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