我正在建立一个拥有很多公司的网站,每个公司都会有很多用户。如何按公司区分用户,以使每个公司的用户彼此隔离?
示例
让我们说我有几个模型,例如User
,Company
和Memo
...
class User(models.Model):
name = models.CharField(max_length=64)
company = models.ForeignKey(Company)
class Company(models.Model):
name = models.CharField(max_length=100)
class Memo(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_time = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
每个备忘录应按公司分隔,以使Company A
的用户都无法看到Company B
的备忘录。我的网站将包含许多此类逻辑。如果我们在每个视图中应用过滤器,例如:
User.object.filter(company_id='1')
是否有一种方法可以将此逻辑放入Model
或Model Manager
中,以便我们使用Fat Models and Skinny Views?还是因为用户的公司不在Memo
模型的范围内而不能这样做?
答案 0 :(得分:1)
您应该使用ForeignKey
并在公司和用户之间创建一个Many-to-one relationships
。
要过滤用户,应在查询中使用Company ForeignKey
。
我从事过许多Django项目,我认为这是您应该采用的方式。