django过滤器中的条件搜索

Conditional search in django filter

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

from .models import Student

#activity is a many to many field

students = Student.objects.filter(name="doe",activity__name__icontains='a' or 'b').distinct().all()

这会起作用。

但我的问题是我有一个要检查活动的项目列表,如果我这样尝试...它会失败

activities = ['a','b','c']
students = Student.objects.filter(name="doe",activity__name__icontains=activities).distinct().all()

列表的长度不是恒定的,它总是变化的。

如有任何帮助,我将不胜感激。

谢谢

第一个不行,它永远不会匹配不包含'a'但包含'b'的东西。 or 将检查 'a' 的真实性,因此永远不会考虑 'b'

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

from django.db.models import <b>Q</b>

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

students = Student.objects.filter(<b>activity_filter,</b> name='doe').distinct()