2011-04-13 4 views
2

J'ai un objet Django appelé "Famille". "Famille" a la variable "enfants", qui est un champ plusieurs à plusieurs d'une classe appelée "Enfant".Recherche inversée sur le champ Django m2m?

Si j'ai un objet "Enfant", y a-t-il un moyen d'obtenir l'objet familial auquel appartient l'enfant?

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

Répondre

4

Django crée automatiquement une relation inverse pour vous dans ce cas, donc avec une instance du modèle Child, vous pouvez trouver toutes les instances de la famille à laquelle appartient l'enfant:

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

Comme il est peu probable qu'un enfant appartenir à plusieurs familles, cependant, ce n'est pas vraiment une situation de plusieurs à plusieurs. Vous voudrez peut-être envisager la modélisation de la relation sur un objet enfant:

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

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

De cette façon, vous pouvez obtenir la famille pour un enfant à l'aide mychild.family et obtenir tous les enfants dans une famille à l'aide de la relation inverse automatique de django myfamily.child_set.all().