在我的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',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中创建多个用户类,因此我只能在一个用户类中实现此功能。