在Django m2m字段上反向查找?

时间:2011-04-13 22:43:59

标签: python django

我有一个名为“Family”的Django对象。 “家庭”有变量“children”,这是一个名为“Child”的类的多对多字段。

如果我有一个“Child”对象,有没有办法得到孩子所属的家庭对象?

Child
      some more fields...
Family
      children = models.ManyToManyField(Child)
      some more fields...

2 个答案:

答案 0 :(得分:4)

在这种情况下,Django会自动为您创建反向关系,因此对于Child模型的实例,您可以找到子项所属的所有Family实例:

c = Child.objects.get(id=1)
c.family_set.all()  # gives you a list of Families

但是,由于孩子不太可能属于多个家庭,因此这不是真正的多对多情况。您可能希望考虑在子对象上建模关系:

class Family(models.Model):
    pass # your fields here

class Child(models.Model):
    family = models.ForeignKey(Family)

通过这种方式,您可以使用mychild.family为孩子建立家庭,并使用django的自动反向关系myfamily.child_set.all()获取所有孩子。

答案 1 :(得分:2)

请参阅http://docs.djangoproject.com/en/dev/topics/db/queries/#many-to-many-relationships

语法为child.family_set.all(),但可以使用related_name参数进行更改。