我很困惑,特别是在将sql查询转换为django ORM函数调用时 转换此行的SQL
AND(presentations.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()
但它无法正常工作。任何人都可以建议我解决这个问题的解决方案
答案 0 :(得分:0)
应用后续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(..)
过滤器的第一部分针对OR
执行q1,q2,q3,q4
,下一批过滤器将是您传统的AND
。