鉴于我的用户表有一个很大的用户列表,其名称可以以数字或字母开头,我如何才能获得名称以A到Z开头的用户?
我尝试了以下但是没有用。
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']))
似乎在objects.filter中Q()被限制为9次。您能否提一些建议?谢谢!
答案 0 :(得分: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
。
希望有所帮助。