【问题标题】: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 会自动为反向关系命名。