如何使用Django ManyToMany关系的“反向”?

时间:2012-02-19 19:52:20

标签: django django-models

我来自Rails背景,并且在使用Django中提供的“关联方法”时遇到了一些麻烦。我有两个模型(为简洁起见而简化),如下:

class User(models.Model):
    username = models.CharField(max_length=100, unique=True)
    companies = models.ManyToManyField('Company', blank=True)

class Company(models.Model):
    name = models.CharField(max_length=255)

根据Django文档:

  

“哪个模型具有ManyToManyField并不重要,但您只应将其放在其中一个模型中 - 而不是两者。”。

所以我理解,如果我有一个名为user的用户实例,我可以这样做:

user.companies

我的问题是如何反过来?如何获取属于公司实例的所有用户,例如公司:

company.users # This doesn't work!

这样做的惯例是什么?我读过的文档并没有真正涵盖这一点。我需要关联工作两种方式,所以我不能简单地将它从一个模型移动到另一个模型。

1 个答案:

答案 0 :(得分:67)

company.user_set.all()

将返回属于特定公司的User个对象的QuerySet。默认情况下,您使用modelname_set来反转关系,但您可以在定义模型时覆盖此项,即提供related_name作为参数,即

class User(models.Model):
    companies = models.ManyToManyField(User, ..., related_name="users")

> company.users.all()

here is the relevant documentation