From 938098389e8f0871a23d193a710c332ea3344eec Mon Sep 17 00:00:00 2001 From: Patrick Canterino Date: Mon, 11 Apr 2022 17:48:13 +0200 Subject: [PATCH] Began to write a manager for the Note class to get some logic out of the views --- notes/models.py | 14 +++++++++++++- notes/views.py | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/notes/models.py b/notes/models.py index 65069db..70961fd 100644 --- a/notes/models.py +++ b/notes/models.py @@ -7,6 +7,16 @@ from django.urls import reverse NOTE_STATUS = ((0, "Draft"), (1, "Published")) +class NoteQuerySet(models.QuerySet): + pass + +class NoteManager(models.Manager): + def per_year(self, year): + return super().get_queryset().filter(status=1, created_at__year=year) + + def per_month(self, year, month): + return super().get_queryset().filter(status=1, created_at__year=year, created_at__month=month) + class Note(models.Model): title = models.CharField(max_length=250) slug = models.SlugField(max_length=250, unique=True) @@ -17,6 +27,8 @@ class Note(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) + objects = NoteManager() + class Meta: ordering = ['-created_at'] @@ -30,4 +42,4 @@ class Note(models.Model): return self.status == 0 def is_published(self): - return self.status == 1 + return self.status == 1 \ No newline at end of file diff --git a/notes/views.py b/notes/views.py index 2c79254..c89d096 100644 --- a/notes/views.py +++ b/notes/views.py @@ -38,9 +38,9 @@ def archive_main(request): return render(request, 'archive_main.html', {'years': notes_years}) def archive_year(request, archive_year): - notes_months = Note.objects.filter(status=1, created_at__year=archive_year).annotate(created_month=ExtractMonth('created_at')).values_list('created_month', flat=True).distinct().order_by('created_month') + notes_months = Note.objects.per_year(archive_year).annotate(created_month=ExtractMonth('created_at')).values_list('created_month', flat=True).distinct().order_by('created_month') return render(request, 'archive_year.html', {'year': archive_year, 'months': notes_months}) def archive_month(request, archive_year, archive_month): - notes = Note.objects.filter(status=1, created_at__year=archive_year, created_at__month=archive_month) + notes = Note.objects.per_month(archive_year, archive_month) return render(request, 'archive_month.html', {'year': archive_year, 'month': archive_month, 'notes': notes}) \ No newline at end of file -- 2.34.1