jalanga:
私は、私は1つのフィールドが重複していると、別の1が異なるクエリを作成できるかどうかを知りたいです。
基本的に私はすべてのUsersNames取得したいFirst Name
同じで、user_id
違うの。これは私がしました
UserNames.objects.values("first_name", "user_id").annotate(ct=Count("first_name")).filter(ct__gt=0)
これは、聖霊降臨祭のすべてのユーザーのリストを取得します
TISの後、私はいくつかのポスト処理を行い、私はちょうどユーザーをフィルタ別のクエリの作成first_name__in=['aaa'] & user_id__in=[1, 2]
と同じで、ユーザーを取得するfirst_name
が、異なるのuser_id
私はちょうど1つのクエリでこれを行うことができますか?またはより良い方法では?
ウィレム・ヴァン・当社:
あなたがここにサブクエリで動作することができますが、それはパフォーマンスの面ではあまり重要ではないだろうと思います。
from django.db.models import Exists, OuterRef, Q
UserNames.objects.filter(
Exists(UserNames.objects.filter(
~Q(user_id=OuterRef('user_id')),
first_name=OuterRef('first_name')
))
)
または前のジャンゴ- 3.0:
from django.db.models import Exists, OuterRef, Q
UserNames.objects.annotate(
has_other=Exists(UserNames.objects.filter(
~Q(user_id=OuterRef('user_id')),
first_name=OuterRef('first_name')
))
).filter(has_other=True)
我々は、このように保持UserNames
存在するオブジェクトUserNames
と同じオブジェクトとfirst_name
、異なるとしますuser_id
。