客户与公司之间的关系

时间:2019-09-09 14:23:02

标签: python django database model many-to-many

我对客户与公司之间的关系有疑问。

要求是这样的

1)客户可以是许多公司的客户。

2)一个公司可以有很多客户。

class Company(models.Model):
    name = models.CharField(max_length=30)
    users = models.ManyToManyField('User')

    def __str__(self):
        return self.name


class User(models.Model):
    name = models.CharField(max_length=30)

    def __str__(self):
        return self.name

我读到这应该是ManyToManyField关系。 但是在公司模型或客户模型中应该在哪里?

1 个答案:

答案 0 :(得分:1)

  

我读到这应该是ManyToManyField关系。但是在Company模型或Client模型中应该在哪里?

那没关系。多对多关系通过一个额外的表存储在数据库中,该表具有两个模型的外键。在您的ManyToManyField中,您可以反向命名该关系:

class Company(models.Model):
    name = models.CharField(max_length=30)
    clients = models.ManyToManyField('User', related_name='companies')

    def __str__(self):
        return self.name


class User(models.Model):
    name = models.CharField(max_length=30)

    def __str__(self):
        return self.name

您可以双向查询。例如:

some_company.clients.all()

是一个QuerySet,用于获取some_company的所有客户端,并且:

some_user.companies.all()

是获取所有QuerSet some_user`的companies of。完全没有区别,因为Django会自动为反向关系指定名称。