如何在一个查询中获得所有对象子级?

时间:2018-06-22 21:14:36

标签: python django python-3.x django-1.11

我有一个模特。每个人都有它的孩子。孩子也可能有孩子。我想在一个查询中(递归地)获取所有子级。我该怎么办?

class Person(models.Model):
    name = models.CharField(max_length=40)
    parent = models.ForeignKey('self', null=True, blank=True, related_name='children')

    def __str__(self):
        return self.name

def add_person(request):
    if(request.method == 'POST'):
        name = request.POST['name']
        parent_id = request.POST.get('parent_id')
        person = Person(name=name, parent_id=parent_id)
        person.save()

        return redirect('/persons')
    else:
        return render(request, 'add_person.html')

1 个答案:

答案 0 :(得分:0)

您可以使用prefetch_related

Person.objects.all().prefetch_related('children')

它有什么作用?作为documentation中的状态,它将:

  

自动为一批指定的查询自动检索相关对象。

它将获取您想要的日期,还将保存一些数据库I / O。

按名称过滤:

Person.objects.filter(name='Vladislav').prefetch_related('children')