【问题标题】:converting sql query into django ORM function calls将 sql 查询转换为 django ORM 函数调用
【发布时间】:2013-06-27 06:45:09
【问题描述】:

我对将 sql 查询转换为 django ORM 函数调用感到困惑,特别是在 转换这行sql

AND (presents.teaching_guide_text LIKE %s OR presentations.name LIKE %s OR presentations.synopsis LIKE %s OR presentations.tags LIKE %s) AND

我试过这样做,

Presentations.objects.\
                        filter(deleted=0).\
                        filter(published=1).\
                        filter(academic_only=0).\
                        filter(video_type=1).\
                        filter(synopsis__icontains=search_item_array[i]).\
                        filter(tags__icontains=search_item_array[i]).\
                        filter(teaching_guide_text__icontains=search_item_array[i]).\
                        filter(name__icontains=search_item_array[i]).all()

但它不能正常工作。任何人都可以建议我解决这个问题的解决方案

【问题讨论】:

标签: mysql django django-models


【解决方案1】:

应用连续的filters 有效地将过滤器与AND 链接起来。你想要的是Q Objects。见下文:

from django.db.models import Q
# breaking them out for readability

q1 = Q(synopsis__icontains=search_item_array[i])
q2 = Q(tags__icontains=search_item_array[i])
q3 = Q(teaching_guide_text__icontains=search_item_array[i])
q4 = Q(name__icontains=search_item_array[i])

Presentation.objects.filter(q1|q2|q3|q4).filter(..).filter(..)

过滤器的第一部分针对q1,q2,q3,q4 执行OR,下一组过滤器将是您的传统ANDs。

【讨论】:

    猜你喜欢
    • 2016-04-20
    • 2020-09-12
    • 1970-01-01
    • 2021-07-06
    • 2022-08-18
    • 2019-10-17
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多