Python django过滤器中的条件搜索

Python django过滤器中的条件搜索,python,django,django-models,django-filters,Python,Django,Django Models,Django Filters,我想用这种方式从数据库中检索一些数据 from.models导入学生 #活动是一个多对多的领域 students=Student.objects.filter(name=“doe”,activity\u name\u icontains='a'或'b')。distinct().all() 这将起作用第一个不起作用,它将永远不会与不包含'a',但包含'b'的内容匹配。或将检查'a'的真实性,因此从不考虑'b' 对于列表,您可以在此处使用Q对象: from django.db.models imp

我想用这种方式从数据库中检索一些数据

from.models导入学生
#活动是一个多对多的领域
students=Student.objects.filter(name=“doe”,activity\u name\u icontains='a'或'b')。distinct().all()

这将起作用第一个不起作用,它将永远不会与不包含
'a'
,但包含
'b'
的内容匹配。
将检查
'a'
的真实性,因此从不考虑
'b'

对于列表,您可以在此处使用
Q
对象:

from django.db.models import Q

activities = ['a','b','c']
activity_filter = Q(
    *[('activity__name__icontains',activity) for activity in activities],
    _connector=Q.OR
)

students = Student.objects.filter(activity_filter, name='doe').distinct()
从django.db.models导入Q
活动=['a'、'b'、'c']
活动过滤器=Q(
*[('activity\uu name\uu icontains',activity)表示活动中的活动],
_连接器=Q或
)

students=Student.objects.filter(activity\u filter,name='doe').distinct()
第一个不起作用,它将永远不会与不包含
'a'
,但包含
'b'
的内容匹配。
将检查
'a'
的真实性,因此从不考虑
'b'
。根据您的解释。我同意我的第一种方法行不通。但有一个问题是,当我试图实现这一点时,我在这一行遇到了一个错误,_connector=Q。OR@SteveMitto:你有什么错误?你在列表理解的前面加了星号了吗?@SteveMitto:对不起,列表理解的末尾少了一个逗号。非常感谢。它工作得很好。谢谢。