1

鉴于我的用户表有一个很大的用户列表,这些用户的名称可以以数字或字母开头,我怎样才能获得名称以 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']))

似乎 Q() 在 objects.filter 中被限制为 9 次。您能否提一些建议?谢谢!

4

1 回答 1

1

你为什么不使用正则表达式过滤器

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

希望有帮助。

于 2014-10-10T06:11:38.223 回答