Запрос сгруппированных данных в Django - PullRequest
0 голосов
/ 24 марта 2011

Я пытаюсь оптимизировать мою очень простую систему нумерации страниц. Я выбираю конкретный контент из моих моделей с

myModel.objects.get(slug='my slug bla bla bla')

и я хотел бы иметь возможность получить в том же запросе следующий и предыдущий Pk от моего идентификатора, чтобы отобразить кнопку next / prec, основанную на Pk или опубликованном. Я посмотрел на нумерацию страниц, но не нашел, как с этим решить мой prec = slug-pk - 1, slug, next = slug-pk + 1. На данный момент я добавил поля в моей модели для получения следующих и предварительных абсолютных URL-адресов, но это довольно уродливо и делает много бесполезных запросов SQL. Вы можете посмотреть на вывод здесь: http://diasporamas.com/le-barbier-de-paris/watch

Есть идеи, как улучшить мою выборку?

Спасибо!

1 Ответ

1 голос
/ 24 марта 2011

Я не верю, что это можно сделать одним запросом.

Самый эффективный способ, которым я могу придумать, будет:

current = myModel.objects.get(slug='my slug bla bla bla')
next = None
next_pk = current.pk + 1
previous = None
prev_pk = current.pk - 1
for mod in myModel.objects.filter(pk__in=(next_pk, prev_pk)):
    if mod.pk == next_pk:
        next = mod
    else:
        prev = mod
...