Префект много ко многим для одного экземпляра класса - PullRequest
1 голос
/ 14 апреля 2020

Я хочу ограничить количество запросов для подробного просмотра. Я хочу получить доступ ко множеству много ко многим полям для одного экземпляра класса в меньшем количестве запросов. Кажется, prefetch_related не работает с get, и сервер обращается к своей базе данных для каждого множества полей.

JobInstance = Job.objects.get(pk=id).prefetch_related('cities').prefetch_related('experience_level')

1 Ответ

1 голос
/ 14 апреля 2020

Вы можете позволить ему работать, переупорядочив его, например:

job_instance = Job.objects<b>.prefetch_related('cities', 'experience_level')</b>.get(pk=id)

A .prefetch_related(..) определяется на QuerySet, когда вы выполняете .get(..) затем Вы получаете объект, и вы больше не работаете с набором запросов.

Но для одного объекта .prefetch_related(..) будет не повысить эффективность. В конце концов, .prefetch_related(..) выполнит здесь два дополнительных запроса для извлечения связанных объектов, точно так же, как и без предварительной выборки, и последующая оценка связанных объектов job_instance.

.prefetch_related(..), поэтому будет полезна, когда вы хотите получить связанные объекты из нескольких объектов оптом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...