2011-12-11 9 views
5

ManyToMany関係内の特定のオブジェクトの存在を確認したいと思います。例えば:ManyToMany関係(Django)でのオブジェクトの存在の確認

class A(models.Model): 
    members = models.ManyToManyField(B) 

class B(models.Model): 
    pass 

results = [some query] 

for r in results: 
    print r.has_object // True if object is related to some B of pk=1 

[some query]での私の最初の刺し傷はA.objects.all().annotate(Count(has_object='members__id=1'))だったが、私はCountに引数にフィールド名以上のものを置くことができないように見えます。これを行うには他の方法がありますか?

答えて

2

を試すことができます

results = A.objects.all().extra(
    select={ 
     'has_object': 'EXISTS(SELECT * FROM myapp_a_members WHERE a_id=myapp_a.id AND b_id=1)' 
    } 
) 

はもちろん、簡単な方法は、単純に二つの別々のクエリセットを操作するようにコードをリファクタリングすることです:SQLに落下によってそれを行うD」

results_with_member_1 = A.objects.filter(members__id=1) 
results_without_member_1 = A.objects.exclude(members__id=1) 
11

あなたは、私はかなり確信して、純粋なPythonでこれを行うにはどのちゃんと実行する方法がないだろうmany-to-many prefetchingは、その間に1.4

で実装されるまで、これはどのように私です

A.objects.filter(members__id=1).exists() 
関連する問題