2016-08-18 13 views
0

に一致する外部キーの数に注釈を付けます同じメールを指す "UserDjangoのクエリは、私は以下の関連のモデルを持っていた場合、特定の値

私はそれがDjango 1.8 introduced Conditional Expressionsを見たことがありますが、この状況にどのように適用されるかはわかりません。 django.db.models.Sumを適用することにより

+0

類似:http://stackoverflow.com/questions/31169108/django-query-annotation-with-boolean-field –

答えて

0

は、ここでそれを達成するための一つの方法だ:

from django.db.models import Case, IntegerField, Sum, When 


def users_with_multiple_email_identities(): 
    """ 
    Return a queryset of Users who have multiple email identities. 
    """ 
    return (
     User.objects 
     .annotate(
      num_email_identities=Sum(
       Case(
        When(identity__category='email', then=1), 
        output_field=IntegerField(), 
        default=Value(0) 
       ) 
      ) 
     ) 
     .filter(num_email_identities__gt=1) 
    ) 

そこで、我々は、ユーザーごとに電子メールのアイデンティティの数を表す集計フィールドを作成するために使用.annotate()を使用し、その後に結果を.filter()を適用します複数の電子メールIDを持つユーザーのみを返します。

関連する問題