【问题标题】:Relationship between the client and the company客户与公司的关系
【发布时间】:2020-01-11 08:01:21
【问题描述】:

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

要求是这样的:

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 关系。 但它应该在 Company 模型中还是在 Client 模型中?

【问题讨论】:

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


    【解决方案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.<b>clients</b>.all()

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

    some_user.<b>companies</b>.all()

    是一个QuerSet来获取所有companies ofsome_user`。完全没有区别,因为 Django 会自动为反向关系命名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      相关资源
      最近更新 更多