2016-12-02 13 views
0

を設定し、私はmodels.pyで以下のモデルの構成を有している、と言うことができます:Djangoが関連するモデルから1行を選択は

class ModelA(models.Model): 
    columnA = models.ForeignKey(ModelZ) 
    created = models.DateTimeField(auto_now_add=True) 

class ModelB(models.Model): 
    columnB = models.ForeignKey(ModelA, related_name='modelsets') 
    is_open = models.BooleanField() 
    created = models.DateTimeField(auto_now_add=True) 

私はすべてのMODELAのオブジェクトを選択することができますし、すべての関連ModelBオブジェクトを使用して知っていますprefetch_related操作。しかし、私の使用例では、ModelAからのすべてのobejectと、特定の条件を満たすModelBオブジェクトからの1つ(またはいくつか)の関連する行のみを選択したかったのです。例えば

:modelB__is_openはそのような真 何かを=

ModelA.objects.prefetch_related( 'modelB_set')。

予想される出力は次のようになります。

[{ 
    columnA : 1 
    created : 'time' 
    modelsets :[{ 
     columnB : 1 
     is_open = True 
     created = 'time' 
    },{ 
     columnB : 2 
     is_open = True 
     created = 'time' 
    } 

},{ 
    columnA : 2 
    created : 'time' 
    modelsets :[{ 
     columnB : 3 
     is_open = True 
     created = 'time' 
    }  
}] 

私はこれについてグーグルの疲れは、DjangoのORMのクエリをより良く理解するためのすべてのリンクは非常にかなりのだろう。ありがとう!

答えて

1

は、私はこれを使用してみましたPrefetch()オブジェクト

queryset_b = Model_B.objects.filter(is_open=True) 
result=Model_A.objects.prefetch_related(Prefetch('modelsets', queryset=queryset_b)) 
+0

を使用してみてください。しかし、ModelAはModelB_setを見つけることができません。 'modelB_set'はprefetch_related()_の無効なパラメータです。私はこれを反映するためにModels.pyで何かする必要がありますか? –

+0

@nithinksああ、related_nameを使用していて、これを試してみてください: 'Prefetch( 'modelsets'、queryset = queryset_b)' – neverwalkaloner

+0

それが助けになりました。どうもありがとう! –

関連する問題