gpt4 book ai didi

python - 将原始 SQL 查询转换为具有多个连接的 Django ORM

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:57 24 4
gpt4 key购买 nike

我有这个原始查询,我需要在 Django 的 ORM 中重写它:

SELECT count(u.username) as user_count, l.id as level_id, l.name as level_name
FROM users u
JOIN user_levels ul ON ul.username = u.username
JOIN sub_levels sl ON sl.id = ul.current_sub_level_id
JOIN levels l ON l.id = sl.level_id
WHERE u.created_at::DATE >= '2018-01-01' AND u.created_at::DATE <= '2018-01-17' AND u.type = 'u'
GROUP BY l.id, l.name

到目前为止我已经能够这样写了:

Users.objects.select_related('user_levels', 'sub_levels', 'levels')
.filter(created_at__date__gte='2018-01-01', created_at__date__lte='2018-01-17', type='u')
.values('userlevel__current_sub_level_id__level_id', 'userlevel__current_sub_level_id__level__name')
.annotate(user_count=Count('username'))

输出有 "userlevel__current_sub_level_id__level_id""userlevel__current_sub_level_id__level__name" 列。我需要将它们别名为 "level_id""level_name"

我该怎么做?

最佳答案

你试过F()表达式了吗?

你可以这样使用它。

from django.db.models import F

queryset.annotate(final_name=F('selected_name'))

更多信息请查看this .

不要忘记使用 final_name(s) 更改值。

关于python - 将原始 SQL 查询转换为具有多个连接的 Django ORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48301889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com