2016-05-18 26 views
0

モデルが約10個のManyToManyFieldsであるとします。 1つのクエリでモデルのすべてのフィールドを照会することは可能ですか?そうでない場合は、できるだけdbクエリの少ないフィールドを取得するにはどうすればよいですか(私はdjango ORMを使用しています)。1つのクエリでモデルの多対多フィールドをすべて取り出すことは可能ですか?

class MyModel(models.Model): 
    name = models.CharField(max_length=200) 
    relation_1 = models.ManyToManyField('app1.model_1') 
    relation_2 = models.ManyToManyField('app1.model_2') 
    relation_3 = models.ManyToManyField('app1.model_3') 
    relation_4 = models.ManyToManyField('app1.model_4') 
    relation_5 = models.ManyToManyField('app2.model_5') 
    relation_6 = models.ManyToManyField('app2.model_6') 
    relation_7 = models.ManyToManyField('app3.model_7') 
    relation_8 = models.ManyToManyField('app3.model_8') 
    relation_9 = models.ManyToManyField('app3.model_9') 
    relation_10 = models.ManyToManyField('app3.model_10') 

rightnow、MyModel.objects.all()は非常に高額に見えます。

答えて

2

あなたは初期モデルのために1つのクエリを使用しますprefetch_related

queryset = MyModel.objects.prefetch_related(
    'relation_1', 'relation_2', ..., 'relation_10', 
) 

、多くの分野にそれぞれ多くのための1つのクエリを使用することができ(例えば11個のクエリが、あなたは10個のフィールドをプリフェッチ場合)。

関連する問題