2016-05-18 3 views
0

Предположим, если у меня есть модель с около 10 ManyToManyFields. Можно ли запросить все поля модели с помощью одного запроса? Если нет, как мне получить поля с наименьшими запросами db, насколько это возможно (я использую django ORM).Можно ли извлекать все многие из многих моделей модели с одним запросом?

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

Вы можете использовать prefetch_related

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

Это будет использовать один запрос для исходной модели, и один запрос для каждого многих многих областях (например, 11 запросов, если вы упреждением 10 полей).

 Смежные вопросы

  • Нет связанных вопросов^_^