Как я могу оптимизировать запросы к моей базе данных, используя мою актуальную модель django? - PullRequest
0 голосов
/ 24 августа 2009

Я не могу опубликовать изображение, потому что я новичок, поэтому вот ссылка , что я хочу .

Итак, у меня есть модель слева, и я хочу, чтобы вид был справа.
На данный момент я перебираю все интересующие меня темы. Код шаблона:

{% for thread in threadlist %}
{% for post in thread.postlist %}
...

Код модели:

class Thread (models.Model):
...    
def postlist(self):
    posts = list(self.post_set.all())
    return [posts.pop(0)] + posts[-2:]

Должен быть способ сделать это с меньшим количеством запросов, объединяя столбцы или что-то в этом роде. Я довольно новичок в Python / Django, и я действительно не знаю, как это сделать.

Ответы [ 2 ]

2 голосов
/ 24 августа 2009

Вы можете использовать select_related . Это сделает запрос последующим объединением, и вы получите один большой запрос вместо множества меньших.

Документы довольно тщательные.

0 голосов
/ 24 августа 2009

Глядя на документацию , вы должны использовать post_set.all (). Я уверен, что к запросам присоединяется django за кулисами, и это лениво. Это означает, что он не будет загружен до тех пор, пока не понадобится.

Из документации:

QuerySets являются ленивыми - процесс создания QuerySet не включает никаких действий с базой данных. Вы можете объединять фильтры весь день, и Django не будет выполнять запрос, пока не будет оценен QuerySet.

...