Django .filter在同一选项上有多种可能性

par*_*870 6 django filter

我有一个对象模型.我还有一个用于过滤结果的选项列表.我不确定是否有一种简单的方法来过滤模型中的对象,以便返回与过滤器列表中的任何项匹配的任何对象.例如:

# returns all users with name starting with 'P'
usersWithPName = User.objects.filter(name__startswith = 'P')
# 3 letters to filter User model with
filterList = ['P', 'T', 'R'] 
# ideally would return all users with name starting with either 'P', 'T', or 'R'
usersWithPTRName = User.objects.filter(name__startswith = filterList) 
Run Code Online (Sandbox Code Playgroud)

有没有办法过滤(在这种情况下)User模型,以便返回匹配filterList中任何一个项目的任何对象?

cat*_*ran 21

这可以使用Q对象完成

from django.db.models import Q
usersWithPTRName = User.objects.filter(Q(name__startswith='P') |
                                       Q(name__startswith='T') |
                                       Q(name__startswith='R')) 
Run Code Online (Sandbox Code Playgroud)

您还可以在运行时构建Q过滤器:

filterList = ['P', 'T', 'R']
query = Q()
for letter in filterList:
    query = query | Q(name__startswith=letter)
usersWithPTRName = User.objects.filter(query)
Run Code Online (Sandbox Code Playgroud)