sql - 如何执行从 RAW SQL 到 django 查询集的翻译
问题描述
我正在努力转换为具有原始 sql 的 django 查询我是 django 的新手,任何帮助将不胜感激
有简单的模型:
酿酒师 - 目标模型
葡萄酒
邮政
酿酒师有 1+ 葡萄酒
葡萄酒有 1+ 个帖子
我知道它应该用注释来完成,但不知道如何实现它。
select w2.*,
(select count(wp.id)
from web_winemaker www
inner join web_wine ww on www.id = ww.winemaker_id
inner join web_post wp on ww.id = wp.wine_id
where
ww.status=20
and
wp.status=20
and
www.id = w2.id
) as wineposts_count,
(
select count(w.id)
from web_winemaker www1
inner join web_wine w on www1.id = w.winemaker_id
where
w.status=20
and www1.id = w2.id
) as wines_count
from web_winemaker w2;
解决方案
您应该能够使用 annotate 函数中的Count 聚合表达式来完成此操作。我猜测了你related_name
在关系字段中的值,所以下面的代码可能不会直接插入,但应该让你知道如何做你想做的事。
from django.db.models import Count, Q
wine_makers = Winemaker.objects.annotate(
posts_count=Count(
'wine__post__id',
filter=Q(wines__status=20, wines__posts__status=20),
),
wines_count=Count(
'wines__id',
filter=Q(wines__status=20),
),
)
您可能需要distinct=True
根据您是否跨越关系来提供。
推荐阅读
- javascript - 使用 xslt 样式表将 xml 转换为 html
- python - ValueError:没有为任何变量提供渐变:['embedding/embeddings:0', ']
- java - String[] 方法返回一个非空的 java
- docker - Podman 中的 Podman,类似于 Docker 中的 Docker?
- javascript - 在 reactjs 中,console.log 无法使用 onSubmit 获取表单
- python - 尽可能多的成对不同正整数的总和
- google-sheets - 将 N 行动态合并为一行
- javascript - 是否有匹配所有 unicode Emojis 的正则表达式?
- python - 如何使用 Python 将 SDP 记录添加到 MacOS?
- python - 以非root用户身份运行python脚本