我有一个模特。每个人都有它的孩子。孩子也可能有孩子。我想在一个查询中(递归地)获取所有子级。我该怎么办?
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')
答案 0 :(得分:0)
您可以使用prefetch_related
:
Person.objects.all().prefetch_related('children')
它有什么作用?作为documentation中的状态,它将:
自动为一批指定的查询自动检索相关对象。
它将获取您想要的日期,还将保存一些数据库I / O。
按名称过滤:
Person.objects.filter(name='Vladislav').prefetch_related('children')