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()
我想用这种方式从我的数据库中检索一些数据
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()