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']))

objects.filter で Q() が 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 シェル コマンドを実行し、このモデルをインポートして、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ですが、条件が1つしかない場合は必要ありません。

それが役立つことを願っています。

于 2014-10-10T06:11:38.223 に答える