diff --git a/district/models.py b/district/models.py index 161e08ac2c3aa5a5ca6635dc5c0c8969e6e766c8..235c42c2411882d1e43ef351f52c42b50547e413 100644 --- a/district/models.py +++ b/district/models.py @@ -4,7 +4,6 @@ from functools import cached_property from django.core.cache import cache from django.core.exceptions import ValidationError -from django.core.paginator import Paginator from django.db import models from django.http import HttpResponseNotFound, HttpResponseRedirect from django.shortcuts import render @@ -543,13 +542,12 @@ class DistrictArticlesPage( def get_context(self, request): context = super().get_context(request) - context["articles"] = self.materialize_shared_articles_query( - Paginator( - self.append_all_shared_articles_query( - DistrictArticlePage.objects.child_of(self) - ), - self.max_items, - ).get_page(request.GET.get("page")) + context["articles"] = self.get_page_with_shared_articles( + self.append_all_shared_articles_query( + DistrictArticlePage.objects.child_of(self) + ), + self.max_items, + request.GET.get("page"), ) return context @@ -615,11 +613,8 @@ class DistrictArticlesPage( ) return { - "article_page_list": self.materialize_shared_articles_query( - Paginator( - article_page_qs, - self.max_items, - ).get_page(request.GET.get("page")) + "article_page_list": self.get_page_with_shared_articles( + article_page_qs, self.max_items, request.GET.get("page") ), "tag": tag, } diff --git a/main/models.py b/main/models.py index f73fb97c533259702322307153df0e44bdb7f9f1..6b8392558b79edff1eba2bcaf53ae008dffe7166 100644 --- a/main/models.py +++ b/main/models.py @@ -501,16 +501,14 @@ class MainArticlesPage( return JsonResponse(data=data, safe=False) def get_articles_response(self, request): - article_paginator = Paginator( + article_page = self.get_page_with_shared_articles( self.append_all_shared_articles_query( MainArticlePage.objects.filter( article_type=ARTICLE_TYPES.PRESS_RELEASE ), ).order_by("union_date", "union_title"), 10, - ) - article_page = self.materialize_shared_articles_query( - article_paginator.get_page(request.GET.get("page", 1)) + request.GET.get("page", 1), ) context = {"article_data_list": article_page.object_list} html_content = render( @@ -523,7 +521,7 @@ class MainArticlesPage( return JsonResponse(data=data, safe=False) def get_all_articles_search_response(self, request): - article_paginator = Paginator( + article_page = self.get_page_with_shared_articles( self.append_all_shared_articles_query( MainArticlePage.objects.search( request.GET["q"], @@ -531,9 +529,7 @@ class MainArticlesPage( ) ), 10, - ) - article_page = self.materialize_shared_articles_query( - article_paginator.get_page(request.GET.get("page", 1)) + request.GET.get("page", 1), ) context = {"article_data_list": article_page.object_list} html_content = render( diff --git a/shared/models.py b/shared/models.py index 9d5de087a8a6b87daf5ad045a596834bb4b32929..14943b91d8945414374a8ce219a00b3386f8ec03 100644 --- a/shared/models.py +++ b/shared/models.py @@ -3,10 +3,10 @@ from enum import Enum from functools import reduce from django.apps import apps +from django.core.paginator import Paginator from django.db import models from django.db.models import Q -from django.db.models.expressions import ExpressionWrapper, F, Value -from django.db.models.functions import Coalesce +from django.db.models.expressions import F, Value from django.utils import timezone from modelcluster.fields import ParentalKey, ParentalManyToManyField from taggit.models import ItemBase, Tag, TagBase @@ -545,6 +545,16 @@ class ArticlesMixin(models.Model): ) ) + def get_page_with_shared_articles( + self, query: models.QuerySet, page_size: int, page: int + ): + return self.materialize_shared_articles_query( + Paginator( + query, + page_size, + ).get_page(page) + ) + def append_all_shared_articles( self, previous_query: models.QuerySet | None = None, custom_article_query=None ): diff --git a/uniweb/models.py b/uniweb/models.py index 916c8776ce938eeac1a6e1b6cad9864f58a1bed6..4d38b4fe5ff77792217fa70be732c12246ee131e 100644 --- a/uniweb/models.py +++ b/uniweb/models.py @@ -2,7 +2,6 @@ import random from captcha.fields import CaptchaField from django import forms -from django.core.paginator import Paginator from django.db import models from django.utils.translation import gettext_lazy from modelcluster.contrib.taggit import ClusterTaggableManager @@ -566,8 +565,10 @@ class UniwebArticlesIndexPage( else articles, ) - context["articles"] = self.materialize_shared_articles_query( - Paginator(articles, ARTICLES_PER_PAGE).get_page(num) + context["articles"] = self.get_page_with_shared_articles( + articles, + ARTICLES_PER_PAGE, + num, ) context["tags"] = self.search_tags_by_unioned_id_query(articles_ids) context["active_tag"] = tag