2014-10-10 63 views
1

鉴于我的用户表有一个用户名列表可以以数字或字母开头的大名单,我如何才能获得名称以A到Z开头的用户?可以在一个查询中使用django objects.filter Q()多少次?

我尝试了以下,但它没有奏效。

 
users = User.objects.filter(reduce(operator.or_, [Q(name__startswith=letter) for letter in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'])) 

但是,如果我尝试以下,它的工作

 
users = User.objects.filter(reduce(operator.or_, [Q(name__startswith=letter) for letter in 'ABCDEFGHI'])) 

这似乎是Q()仅限于objects.filter 9倍。您能否提一些建议?谢谢!

+0

当你说,第一个没有工作,是否会抛出一些错误? – 2014-10-10 04:02:39

回答

1

为什么不使用Regex filter

users = User.objects.filter(name__iregex=r'^[A-Z]') 
for user in users: 
    print user.name 

这里怎么我只是想在我的本地测试Django项目: 刚刚创建了一个型号为:

from django.db import models 

class Users(models.Model): 
    name = models.CharField(max_length=50) 

冉Django的manage.py shell命令,导入了该模式,创造, 3个用户:

>>>Users.objects.create(name="FirstUser").save() 
>>>Users.objects.create(name="SecondUser").save() 
>>>Users.objects.create(name="12NumberedUser").save() 

>>> for i in Users.objects.filter(name__iregex=r'^[A-Z]'): 
...  print i.name 
... 
FirstUser 
SecondUser 
>>> 

而且,Q它以同样的方式,但没有必要的Q如果你有唯一的条件。

希望有所帮助。

相关问题