Django .filter具有多种可能性 [英] Django .filter on same option with multiple possibilities

查看:84
本文介绍了Django .filter具有多种可能性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个对象模型。我也有一个筛选结果的选项列表。我不知道是否有一种简单的方法来过滤模型中的对象,以便返回与过滤器列表中的任何项匹配的任何对象。例如:

 #返回名称以'P'开始的所有用户
usersWithPName = User.objects.filter
#3个字母以过滤用户模型
filterList = ['P','T','R']
#理想地将返回名称开始的所有用户用'P','T'或'R'
usersWithPTRName = User.objects.filter(name__startswith = filterList)

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

解决方案

这可以通过 Q对象

 从django.db.models导入Q 
usersWithPTRName = User.objects.filter(Q(name__startswith ='P')|
Q(name__startswith ='T ')|
Q(name__startswith ='R'))

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

  filterList = ['P','T','R'] 
query = Q ()
filterList中的字母:
query = query | Q(name__startswith = letter)
usersWithPTRName = User.objects.filter(query)


I have a model of objects. I also have a list of options to filter results with. I'm not sure if there is an easy way to filter the objects in the model such that any object that matches any of the items in the filter list is returned. For example:

# 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) 

Is there any way to filter (in this case) the User model such that any object matching any one of the items in the filterList is returned?

解决方案

This can be done with Q objects

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

Also you can build Q filters at runtime:

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

这篇关于Django .filter具有多种可能性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆