mod: tune item navigation queries
This commit is contained in:
@@ -247,4 +247,11 @@ class TbContent(models.Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Контент"
|
verbose_name = "Контент"
|
||||||
verbose_name_plural = u"Контент"
|
verbose_name_plural = u"Контент"
|
||||||
|
# Если боковая навигация или лента начнут упираться в SQLite, сюда можно
|
||||||
|
# добавить составные индексы. Пока оставляем это как подсказку, чтобы не
|
||||||
|
# менять схему базы без замеров.
|
||||||
|
# indexes = [
|
||||||
|
# models.Index(fields=['bContentPublish', 'tdContentPublishUp']),
|
||||||
|
# models.Index(fields=['bContentPublish', 'tdContentPublishDown']),
|
||||||
|
# ]
|
||||||
ordering = ['-tdContentPublishUp', ]
|
ordering = ['-tdContentPublishUp', ]
|
||||||
|
|||||||
@@ -154,20 +154,19 @@ def show_item(request,
|
|||||||
if not q_item.bContentPublish:
|
if not q_item.bContentPublish:
|
||||||
raise Http404("Контент не опубликован")
|
raise Http404("Контент не опубликован")
|
||||||
to_template["ITEM"] = q_item
|
to_template["ITEM"] = q_item
|
||||||
# query = Q(tdContentPublishDown__isnull=True)
|
now_value = timezone.now()
|
||||||
# query.add(Q(tdContentPublishDown__gt=timezone.now()), Q.OR)
|
# Фрмируем список заголовков для боковой навигации
|
||||||
# query.add(Q(bContentPublish=True), Q.AND)
|
# Два запроса, т.к. это проще и "дешевле" чем городить один запрос и после делить его срезами.
|
||||||
# query.add(Q(tdContentPublishUp__lte=q_item.tdContentPublishUp), Q.AND)
|
|
||||||
q_items_after = TbContent.objects.filter(
|
q_items_after = TbContent.objects.filter(
|
||||||
Q(tdContentPublishDown__isnull=True) | Q(tdContentPublishDown__gt=timezone.now()),
|
Q(tdContentPublishDown__isnull=True) | Q(tdContentPublishDown__gt=now_value),
|
||||||
Q(bContentPublish=True),
|
Q(bContentPublish=True),
|
||||||
Q(tdContentPublishUp__lte=q_item.tdContentPublishUp)
|
Q(tdContentPublishUp__lte=q_item.tdContentPublishUp)
|
||||||
).order_by("-tdContentPublishUp", "id")[:settings.NUM_NAV_ITEMS_IN_PAGE / 2]
|
).only("id", "szContentHead", "szContentSlug", "tdContentPublishUp").order_by("-tdContentPublishUp", "id")[:settings.NUM_NAV_ITEMS_IN_PAGE // 2 + 1]
|
||||||
q_items_before = TbContent.objects.filter(
|
q_items_before = TbContent.objects.filter(
|
||||||
Q(tdContentPublishDown__isnull=True) | Q(tdContentPublishDown__gt=timezone.now()),
|
Q(tdContentPublishDown__isnull=True) | Q(tdContentPublishDown__gt=now_value),
|
||||||
bContentPublish=True,
|
bContentPublish=True,
|
||||||
tdContentPublishUp__gt=q_item.tdContentPublishUp
|
tdContentPublishUp__gt=q_item.tdContentPublishUp
|
||||||
).order_by("tdContentPublishUp", "id")[:settings.NUM_NAV_ITEMS_IN_PAGE / 2 - 1]
|
).only("id", "szContentHead", "szContentSlug", "tdContentPublishUp").order_by("tdContentPublishUp", "id")[:settings.NUM_NAV_ITEMS_IN_PAGE // 2]
|
||||||
try:
|
try:
|
||||||
p = 0 if "p" not in request.GET else int(request.GET["p"])
|
p = 0 if "p" not in request.GET else int(request.GET["p"])
|
||||||
n = 0 if "n" not in request.GET else int(request.GET["n"])
|
n = 0 if "n" not in request.GET else int(request.GET["n"])
|
||||||
|
|||||||
Reference in New Issue
Block a user