From f1b3a174b668cf0bb926b0cc6314c78f943ed120 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Mon, 9 Sep 2019 00:45:08 +0200 Subject: [PATCH] core: improve performances on notification reads and display --- core/migrations/0032_auto_20190909_0043.py | 20 ++++++++++++++++++++ core/models.py | 2 +- core/views/site.py | 4 +++- 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 core/migrations/0032_auto_20190909_0043.py diff --git a/core/migrations/0032_auto_20190909_0043.py b/core/migrations/0032_auto_20190909_0043.py new file mode 100644 index 00000000..35671cc0 --- /dev/null +++ b/core/migrations/0032_auto_20190909_0043.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.24 on 2019-09-08 22:43 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [("core", "0031_auto_20190906_1615")] + + operations = [ + migrations.AlterField( + model_name="notification", + name="viewed", + field=models.BooleanField( + db_index=True, default=False, verbose_name="viewed" + ), + ) + ] diff --git a/core/models.py b/core/models.py index f873e785..d27a2f79 100644 --- a/core/models.py +++ b/core/models.py @@ -1393,7 +1393,7 @@ class Notification(models.Model): _("type"), max_length=32, choices=settings.SITH_NOTIFICATIONS, default="GENERIC" ) date = models.DateTimeField(_("date"), default=timezone.now) - viewed = models.BooleanField(_("viewed"), default=False) + viewed = models.BooleanField(_("viewed"), default=False, db_index=True) def __str__(self): if self.param: diff --git a/core/views/site.py b/core/views/site.py index 8a0f2261..468d3f32 100644 --- a/core/views/site.py +++ b/core/views/site.py @@ -2,6 +2,7 @@ # # Copyright 2016,2017 # - Skia +# - Sli # # Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM, # http://ae.utbm.fr. @@ -50,8 +51,9 @@ class NotificationList(ListView): template_name = "core/notification_list.jinja" def get_queryset(self): + # TODO: Bulk update in django 2.2 if "see_all" in self.request.GET.keys(): - for n in self.request.user.notifications.all(): + for n in self.request.user.notifications.filter(viewed=False): n.viewed = True n.save() return self.request.user.notifications.order_by("-date")[:20]