diff --git a/.isort.cfg b/.isort.cfg index 340422d3f105d7b81db8953287dfc01b98d2ff0f..2f6cd78cd74f366eeb3e0935312c81f2b9d25fc8 100644 --- a/.isort.cfg +++ b/.isort.cfg @@ -3,4 +3,4 @@ line_length = 88 multi_line_output = 3 include_trailing_comma = true -known_third_party = PyPDF2,arrow,bleach,bs4,captcha,celery,django,environ,faker,fastjsonschema,icalevnt,markdown,modelcluster,pirates,pytest,pytz,requests,sentry_sdk,taggit,tweepy,wagtail,wagtailmetadata,weasyprint,yaml +known_third_party = PyPDF2,arrow,bleach,bs4,captcha,celery,dateutil,django,environ,faker,fastjsonschema,icalevnt,markdown,modelcluster,pirates,pytest,pytz,requests,sentry_sdk,taggit,tweepy,wagtail,wagtailmetadata,weasyprint,yaml diff --git a/main/models.py b/main/models.py index d2c6fd97b0c733b0428b0c7b1401995bdfe3e3d7..5a4d1708da4a24fe1f2a2c871bbe569d10ee6e62 100644 --- a/main/models.py +++ b/main/models.py @@ -1,6 +1,7 @@ from datetime import timedelta from functools import cached_property +from dateutil.relativedelta import relativedelta from django.conf import settings from django.core.paginator import Paginator from django.db import models @@ -333,15 +334,21 @@ class MainArticlesPage( class Meta: verbose_name = "Rozcestník článků" - def get_article_data_list(self, month_back): - first_day_of_last_month = None - last_month = timezone.now().today() - for x in range(month_back): - last_month = last_month.replace(day=1) - timedelta(days=1) - first_day_of_last_month = last_month.replace(day=1) + def get_article_data_list(self, months_back: int = 1): + target_date_list = ( + MainArticlePage.objects.filter(article_type=ARTICLE_TYPES.WORK_TIMELINE) + .order_by("-date") + .values_list("date", flat=True) + ) + + if not target_date_list: + return [self.get_empty_month_data(timezone.now().date())] + + target_date = target_date_list[0] - relativedelta(months=months_back) + first_day_of_target_month = target_date.replace(day=1) sorted_article_qs = MainArticlePage.objects.filter( - date__gt=first_day_of_last_month, article_type=ARTICLE_TYPES.WORK_TIMELINE + date__gt=first_day_of_target_month, article_type=ARTICLE_TYPES.WORK_TIMELINE ).order_by("-date") article_data_list = [] @@ -365,16 +372,21 @@ class MainArticlesPage( def get_context(self, request, *args, **kwargs): ctx = super().get_context(request, args, kwargs) + article_timeline_list = self.get_article_data_list(1) ctx["article_timeline_list"] = article_timeline_list ctx["show_next_timeline_articles"] = MainArticlePage.objects.filter( article_type=ARTICLE_TYPES.WORK_TIMELINE ).count() > len(article_timeline_list) + article_list = MainArticlePage.objects.filter( article_type=ARTICLE_TYPES.PRESS_RELEASE - ).order_by("-date") + ).order_by("-date")[ + :11 + ] # dám LIMIT +1, abych věděl, jestli má cenu show_next ctx["article_article_list"] = article_list[:10] - ctx["show_next_article"] = len(article_list) > 4 + ctx["show_next_article"] = len(article_list) > 10 + return ctx def get_timeline_articles_response(self, request):