2016-07-08 4 views
1

модели My Django выглядитИспользование Django ORM запрос Как аннотировать, если несколько уровней внешнего ключа иерархии существует

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')) 

Но как я могу получить подсчет количества Чайлдс и числа великих Чайлдс для каждого родителя

+0

Такие вещи решаются с помощью рекурсии, например, вы создаете метод get_children, который выполняет итерацию над каждым дочерним элементом и вызывает их get_children, пока больше не нужно звонить. –

ответ