我对客户与公司之间的关系有疑问。
要求是这样的
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关系。 但是在公司模型或客户模型中应该在哪里?
答案 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会自动为反向关系指定名称。