python - 如何在一个查询中获取所有对象子对象?
问题描述
我有一个人物模型。每个人都有自己的孩子。孩子也可能有孩子。我想在一个查询中获取所有孩子(递归)。我怎样才能做到这一点?
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')
解决方案
您可以使用prefetch_related
:
Person.objects.all().prefetch_related('children')
它有什么作用?如文档中所述,它将:
在单个批次中自动检索每个指定查找的相关对象。
它会获取您想要的日期,并且还会保存一些数据库 i/o。
按名称过滤:
Person.objects.filter(name='Vladislav').prefetch_related('children')
推荐阅读
- r - R-根据其他列中的非空行合并多列中的可变行数
- c# - 为什么我的 BackgroundService 立即停止?
- android - Android解析具有未知属性名称的json列表
- node.js - 带有内置 node js 后端的 GraphQL API 消耗高 CPU 使用率
- html - 使用 @media only screen 和 (max-width) 在 css 中更改 div 的宽度和高度的问题
- javascript - 当套接字 io 在 NGNIX 负载均衡器上运行但在使用 pm2 的 fork 上运行时,如何在节点 js 多集群模式下共享全局变量?
- ios - 后台服务不会在 iOS 中停止
- python - 无法在 Django 休息框架中创建没有字段的模型
- c# - 如何在 WebAPI(.net core 3)中使用多个子节点建模绑定 XML POST
- java - 在 db OffsetDateTime 或 Instant 中坚持什么更好