2012-07-04 1 views
0

Я перебираю запрос и выбираю поле «один ко многим». Теперь для каждого вызова есть запрос, который запускается. Django 1.4 имеет prefetch_related. Как я могу сделать что-то подобное с Django 1.3.1?Предварительная выборка записей «один ко многим» в Django 1.3.1

+0

Я написал о различных методах для этого в своем блоге: http://blog.roseman.org.uk/2010/01/11/django-patterns-part-2-efficient-reverse-lookups/ –

ответ

0

попробовать https://github.com/ionelmc/django-prefetch

звучат хорошо:

Простых и общие связанные модели упреждающей данные рамок для Джанго решения «1 + N запросов» проблемы, что происходит, когда вам необходимы соответствующие данные для ваших объектов. В большинстве случаев вы будете иметь прямые отношения (внешние ключи к чему-то) и можете использовать select_related для извлечения этих данных по одному и тому же запросу. Однако в некоторых случаях вы не можете создавать свои модели таким образом и нуждаться в данных из обратных отношений (модели, которые имеют внешние ключи к вашим объектам). Однако Django 1.4 имеет prefetch_related для этого, однако эта структура обеспечивает большую гибкость, чем метод предпросмотра Django 1.4 prefetch_related, за счет наложения функций отображения и запроса для данных. Это имеет то преимущество, что вы можете делать что-то, чего не может сделать prefetch_related (см. Пример последней версии ниже).

+0

Согласен (для 1-в-N). Плюс используйте select_related для N-to-1 (FKs). – laffuste