过滤Django QuerySet以仅包含给定列表的结果

时间:2012-06-05 20:14:39

标签: django

我需要从变长列表中获取所有包含所有“部分”的书籍。

喜欢(不工作):

title_list = ['tree', 'sun']
books = Books.objects.filter(title__icontains=title_list)

或在SQL(工作)中:

SELECT * FROM `books` WHERE title LIKE '%tree%' AND title LIKE '%sun%';

我该怎么做?

1 个答案:

答案 0 :(得分:3)

这似乎有效:

from django.db.models import Q

title_list = ['tree', 'sun']

Books.objects.filter(reduce(lambda a, b: a & b, [Q(title__icontains=title) for title in title_list]))