在Django M2M字段上反向查找?

问题描述

| 我有一个名为\“ Family \”的Django对象。 \“ Family \”具有变量\“ children \”,这是称为\“ Child \”的类的多对多字段。 如果我有一个\“ Child \”对象,有没有办法获得该孩子所属的Family对象?
Child
      some more fields...
Family
      children = models.ManyToManyField(Child)
      some more fields...
    

解决方法

在这种情况下,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()
来获得一个家庭中的所有孩子。     ,参见http://docs.djangoproject.com/en/dev/topics/db/queries/#many-to-many-relationships 语法为
child.family_set.all()
,但可以使用
related_name
参数进行更改。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...