django - 子对象的Django链过滤器
问题描述
我有父模型和子模型,并尝试按条件过滤链子对象
objects = Parent.objects.all()
if val1:
objects = objects.filter(children__arg1=val1)
if val2:
objects = objects.filter(children__arg2=val2)
如果我创建一个子过滤链,Django 会像这样使用单独的 WHERE Smth 进行几次 JOIN:
JOIN "children" c1 ON c1."parent_id" = "parent"."id"
JOIN "children" c2 ON c2."parent_id" = "parent"."id"
WHERE
c1."arg1" = val1 AND
c2."arg2" = val2
我可以先过滤 Child :
filtered_children = Child.objects.all()
if val1:
filtered_children = filtered_children.filter(arg1=val1)
if val2:
filtered_children = filtered_children.filter(arg2=val2)
接着
objects = Parent.objects.filter(children__in=filtered_children)
但后来我失去了没有孩子的物品。所以我必须这样做:
objects = Parent.objects.all()
if val1 or val2: #'filter was applied' detection
objects = objects.filter(children__in=filtered_children)
看起来很糟糕。有没有更好的方法来按条件过滤子对象?
解决方案
推荐阅读
- node.js - Express-fileupload req.files 为空
- android - 我可以在 Unity 安卓游戏中使用谷歌地球或谷歌地图静态 2D 图像作为背景吗?
- c++ - 错误:没有忽略 void 值,因为它应该在 lambda 表达式中
- javascript - Bootstrap 5 按钮折叠和轮播
- fonts - groff eqn 中字符/字形之间的多余空格
- php - 如何在 Centos 7 上更改用户的主目录?
- arduino - 当我单击遥控器上的下一个按钮时,IR 代码不会更改命令
- python - Python:如何连接字典来创建一个新的?思科 DNA 中心
- python-3.x - 如何循环直到使用pynput按下某个按钮?
- python - 向 tensorflow 优化器添加配置