Djangoクエリセットで以下のフィルターを実行するにはどうすればよいですか?


175

プロファイルと呼ばれる各ユーザープロファイルのカスタムフィールドでユーザーをフィルターしようとしています。このフィールドはレベルと呼ばれ、0〜3の整数です。

等しいを使用してフィルタリングすると、選択したレベルのユーザーのリストが期待どおりに表示されます。

user_list = User.objects.filter(userprofile__level = 0)

以下を使用してフィルタリングしようとすると:

user_list = User.objects.filter(userprofile__level < 3)

エラーが発生します:

グローバル名「userprofile__level」が定義されていません

<または>でフィルタリングする方法はありますか、それとも間違ったツリーを呼び出していますか?


2
@BéresBotondドキュメントは見栄えが良いですが、構造とレイアウトが非常に悪いため、直接リンクがないと
ほとんど役に立ちません

@BéresBotond残念なことに、そのリンクは今死んでいます:(
dKen

回答:


336

以下:

User.objects.filter(userprofile__level__lte=0)

以上:

User.objects.filter(userprofile__level__gte=0)

同様にlt、より小さいとgtより大きい。これらはすべてドキュメントにあります


2
うわー、それは速かった:)。これは以下の場合に効果がありますが、それ以下の場合はどうでしょうか?(userprofile__level__lt = 3)が機能していないようです
Finglish

1
します; ただし、いずれの場合も、filter(__ lt)の代わりにexclude(__ gte)を実行することもできます。
ラクシュマンプラサード

2
そして、__アンダーラインが2つあることを忘れないでください
andilabs

このエラーが発生しました-> {FieldError} AutoFieldのサポートされていないルックアップ「レベル」またはフィールドでの結合は許可されていません。
Aravind R Pillai
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.