diff --git a/konova/views/home.py b/konova/views/home.py index b62e63e..743ef32 100644 --- a/konova/views/home.py +++ b/konova/views/home.py @@ -38,13 +38,7 @@ def home_view(request: HttpRequest): user_teams = user.shared_teams # Fetch the four newest active and published ServerMessages - msgs = ServerMessage.objects.filter( - is_active=True, - publish_on__lte=now, - unpublish_on__gte=now, - ).order_by( - "-publish_on" - )[:3] + msgs = ServerMessage.get_current_news()[:3] # First fetch all valid objects (undeleted, only newest versions) interventions = Intervention.objects.filter( diff --git a/news/migrations/0003_auto_20230324_0720.py b/news/migrations/0003_auto_20230324_0720.py new file mode 100644 index 0000000..0551deb --- /dev/null +++ b/news/migrations/0003_auto_20230324_0720.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.3 on 2023-03-24 06:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0002_auto_20220114_0936'), + ] + + operations = [ + migrations.AlterField( + model_name='servermessage', + name='unpublish_on', + field=models.DateTimeField(blank=True, null=True), + ), + ] diff --git a/news/models.py b/news/models.py index b9a26e0..cc9fa60 100644 --- a/news/models.py +++ b/news/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.utils import timezone from django.utils.translation import gettext_lazy as _ from konova.models import BaseResource @@ -22,7 +23,7 @@ class ServerMessage(BaseResource): body = models.TextField() is_active = models.BooleanField(default=True) publish_on = models.DateTimeField() - unpublish_on = models.DateTimeField() + unpublish_on = models.DateTimeField(null=True, blank=True) importance = models.CharField(max_length=100, choices=ServerMessageImportance.choices) def save(self, user=None, *args, **kwargs): @@ -34,3 +35,24 @@ class ServerMessage(BaseResource): self.modified = UserActionLogEntry.get_edited_action(user) super().save(*args, **kwargs) + + @staticmethod + def get_current_news(): + """ Getter for the most current news + + Meaning the ones that are + * activated + * publish_on has passed + * unpublish_on (if set) has not been passed, yet + + """ + now = timezone.now() + news = ServerMessage.objects.filter( + is_active=True, + publish_on__lte=now, + ).exclude( + unpublish_on__lte=now, + ).order_by( + "-publish_on" + ) + return news \ No newline at end of file diff --git a/news/views.py b/news/views.py index a556e4c..9f1c6e7 100644 --- a/news/views.py +++ b/news/views.py @@ -20,14 +20,7 @@ def index_view(request: HttpRequest): """ template = "news/index.html" - now = timezone.now() - news = ServerMessage.objects.filter( - is_active=True, - publish_on__lte=now, - unpublish_on__gte=now - ).order_by( - "-publish_on" - ) + news = ServerMessage.get_current_news() context = { "news": news,