2016-07-08 12 views
1

Meine Django Modelle sieht aus wieMit Django ORM Abfrage Wie man mit Anmerkungen versehen, wenn mehrere Ebenen von Fremdschlüssel Hierarchie existiert

class Parent(models.Model): 
    name = models.CharField(('name'), max_length=30) 

class Child(models.Model): 
    parent = models.ForeignKey(Parent) 
    name = models.CharField(('name'), max_length=30) 

class GrandChild(models.Model): 
    child = models.ForeignKey(Child) 
    name = models.CharField(('name'), max_length=30) 

-> To Get Number of Childs for parent following query does    
    Parent.objects.annotate(childs=Count('Child')).values('childs') 

-> To Get Number of Grand Childs for parent following query does    
    Parent.objects.annotate(childs=Count('child')).annotate(grandchilds=Count('child__grandchild')) 

Aber wie kann ich die Anzahl der Kinderanzahl und die Anzahl der großen Kindes für jeden Elternteil erhalten

+0

Diese Art von Dingen wird mit Rekursion gelöst, zum Beispiel machen Sie eine get_children-Methode, die über jedes Kind iteriert und ihre get_children aufruft, bis keine Anrufe mehr anstehen. –

Antwort

1

Versuchen distinct zu verwenden:

Count('child', distinct=True) 

Mehr Details über den Link:

+0

Danke Sergey .. es funktionierte wie ein Charme :) – user2959723

Verwandte Themen