如何在Model Manager Django中为公司过滤Model实例?

时间:2019-10-10 16:18:48

标签: python django django-models

我正在建立一个拥有很多公司的网站,每个公司都会有很多用户。如何按公司区分用户,以使每个公司的用户彼此隔离?

示例

让我们说我有几个模型,例如UserCompanyMemo ...

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')

是否有一种方法可以将此逻辑放入ModelModel Manager中,以便我们使用Fat Models and Skinny Views?还是因为用户的公司不在Memo模型的范围内而不能这样做?

1 个答案:

答案 0 :(得分:1)

您应该使用ForeignKey并在公司和用户之间创建一个Many-to-one relationships

要过滤用户,应在查询中使用Company ForeignKey

我从事过许多Django项目,我认为这是您应该采用的方式。