1

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

要求是这样的:

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 模型中的什么位置呢?

4

1 回答 1

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

是 aQuerySet获取 的所有客户some_company,并且:

some_user.companies.all()

是一个QuerSet获取所有companies ofsome_user 的方法。根本没有区别,因为 Django 会自动为反向关系命名。

于 2019-09-09T14:26:40.350 回答