您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用JOIN表达式翻译查询以及与Django ORM的通用关系

使用JOIN表达式翻译查询以及与Django ORM的通用关系

经过一天的苦苦挣扎,我终于解决了。尽管它不会从上方产生相同的查询,并且效率不高(因为它在查询事件中选择了所有喜欢的事物),但似乎这是在ORM中执行此操作的唯一好方法

from django.db.models import Case, When, F

Event.objects.filter( \
        Q(business__manager=person) | \
        Q(likes__person=person)) \
    .order_by( \
        Case( \
            When(likes__person=person, then=F('likes__date')), \
            default=F('when')) \
    .desc())

这是它产生的sql

SELECT event.*
FROM event
INNER JOIN
    business
    ON (event.business_id = business.id)
LEFT OUTER JOIN
    'like'
    ON (event.id = object_id AND content_type_id = 17)
WHERE (business.manager_id = 2 OR 'like'.person_id = 2)
ORDER BY CASE
    WHEN 'like'.person_id = 2 THEN 'like'.date
    ELSE event.'when'
END DESC;
Go 2022/1/1 18:50:19 有341人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶