一つのフィールドが重複していると、別の異なるDjangoのクエリ

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

または前の

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

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=5792&siteId=1