Django ORM: Выбор связанного набора

Чтобы создать пакет Python, который вы можете импортировать, вам нужно создать __init__.py в папке. __init__.py может быть пустым файлом. В вашем случае вы должны создать __init__.py в вашей папке классов

Тогда вы можете использовать следующую инструкцию импорта: from classes.classeCarte import *

18
задан Frédéric Jolliton 12 May 2009 в 14:50
поделиться

3 ответа

Обновление : Начиная с Django 1.4 эта функция встроена: см. prefetch_related .

Первый ответ: не тратьте время на написание чего-то вроде qbind, пока вы уже написали рабочее приложение, профилировали его и продемонстрировали, что N запросов на самом деле являются проблемой производительности вашей базы данных и сценариев загрузки.

Но, возможно, вы это сделали. Итак, второй ответ: qbind () делает то, что вам нужно, но было бы более идиоматично, если бы он был упакован в настраиваемый подкласс QuerySet с сопутствующим подклассом Manager, который возвращает экземпляры настраиваемого QuerySet. В идеале вы могли бы даже сделать их универсальными и многоразовыми для любых обратных отношений. Затем вы можете сделать что-то вроде:

Poll.objects.filter(category='foo').fetch_reverse_relations('choices_set')

Пример метода Manager / QuerySet см. в этом фрагменте , который решает аналогичную проблему, но в случае общих внешних ключей, а не обратных отношений. Было бы несложно объединить внутренности вашей функции qbind () с показанной там структурой, чтобы получить действительно хорошее решение вашей проблемы.

13
ответ дан 30 November 2019 в 06:35
поделиться

I think what you are trying to do is the term "eager loading" of child data - meaning you are loading the child list (choice_set) for each Poll, but all in the first query to the DB, so that you don't have to make a bunch of queries later on.

If this is correct, then what you are looking for is 'select_related' - see https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

I noticed you tried 'select_related' but it didn't work. Can you try doing the 'select_related' and then the filter. That might fix it.


UPDATE: This doesn't work, see comments below.

1
ответ дан 30 November 2019 в 06:35
поделиться

Думаю, вы говорите: «Я хочу, чтобы для набора опросов были выбраны все варианты». Если да, попробуйте следующее:

polls = Poll.objects.filter(category='foo')
choices = Choice.objects.filter(poll__in=polls)
15
ответ дан 30 November 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: