2014-10-10 1 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() ограничено до 9 раз в objects.filter. Могли бы вы, пожалуйста, посоветовать? Благодаря!

+0

Когда вы говорите, первый не работал, это вызвало ошибку? –

ответ

1

Почему бы вам не использовать Regex filter?

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

Вот как я просто пытался в моем местном проекте теста Джанго: Просто создала модель, как:

from django.db import models 

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

Ран Джанго команды manage.py оболочки, импортируемую эту модель, и создал, 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, если у вас есть только одно условие.

Надеюсь, что это поможет.