News are now pinned for 1 month and events for 7 days.

This commit is contained in:
2024-08-21 16:59:27 +02:00
parent 4134ad67d5
commit f121239d31
3 changed files with 48 additions and 14 deletions

View File

@@ -6,17 +6,18 @@ from posts.models import Event, FetMeeting, Post
def index(request): def index(request):
posts = deque(Post.articles.date_sorted_list()) posts = Post.articles.date_sorted_list()
# A maximum of 5 posts should be displayed on the startpage.
post_count = 5
# set the pinned post # Set the pinned post.
pinned_post = Post.articles.pinned() if pinned_post := Post.articles.pinned():
if pinned_post: posts = posts.exclude(id=pinned_post.id)
# remove the pinned post post_count -= 1
posts.remove(pinned_post)
featured_event = Event.only_events.future_events().first() featured_event = Event.only_events.future_events().first()
# if there is no futurity event # If there is no futurity event, get the last event.
if not featured_event: if featured_event is None:
featured_event = Event.only_events.past_events().first() featured_event = Event.only_events.past_events().first()
featured_meeting = deque([]) featured_meeting = deque([])
@@ -24,7 +25,7 @@ def index(request):
featured_meeting.append(FetMeeting.objects.past_events().first()) featured_meeting.append(FetMeeting.objects.past_events().first())
context = { context = {
"posts": deque(list(posts)[:5]), "posts": posts[:post_count],
"events": Event.all_events.future_events()[:5], "events": Event.all_events.future_events()[:5],
"featured_post": pinned_post, "featured_post": pinned_post,
"featured_event": featured_event, "featured_event": featured_event,

View File

@@ -40,7 +40,10 @@ class NewsForm(PostForm):
"Die Hashtags ohne '#' eintragen, und mit Komma kann man mehrere Tags anfügen." "Die Hashtags ohne '#' eintragen, und mit Komma kann man mehrere Tags anfügen."
), ),
"image": "Verwendbare Formate: ...", "image": "Verwendbare Formate: ...",
"is_pinned": ("Dieser Post soll an die Startseite als erster Post angeheftet werden."), "is_pinned": (
"Der Post soll als erster auf der Startseite angeheftet werden und sich "
"automatisch einen Monat nach der Veröffentlichung wieder lösen."
),
} }
labels = { labels = {
@@ -72,7 +75,10 @@ class EventForm(PostForm):
"Die Hashtags ohne '#' eintragen, und mit Komma kann man mehrere Tags anfügen." "Die Hashtags ohne '#' eintragen, und mit Komma kann man mehrere Tags anfügen."
), ),
"image": "Verwendbare Formate: Bildformate", "image": "Verwendbare Formate: Bildformate",
"is_pinned": ("Dieses Event soll an die Startseite als erster Post angeheftet werden."), "is_pinned": (
"Dieses Event soll als erstes auf der Startseite angeheftet werden und sich "
"automatisch einen Monat nach der Veröffentlichung wieder lösen."
),
} }
labels = { labels = {
@@ -115,7 +121,7 @@ class FetMeetingForm(PostForm):
} }
help_texts = { help_texts = {
"event_end": "Bei leerer Eingabe werden 2h zur Startzeit dazugezählt.", "event_end": "Bei einer leeren Eingabe werden 2 Stunden zur Startzeit dazugezählt.",
"tags": ( "tags": (
"Die Hashtags ohne '#' eintragen, und mit Komma kann man mehrere Tags anfügen." "Die Hashtags ohne '#' eintragen, und mit Komma kann man mehrere Tags anfügen."
), ),
@@ -223,7 +229,7 @@ class FetMeetingCreateForm(forms.ModelForm):
fields = ["event_start", "event_end", "event_place"] fields = ["event_start", "event_end", "event_place"]
help_texts = { help_texts = {
"event_end": "Bei leerer Eingabe werden 2h zur Startzeit dazugezählt.", "event_end": "Bei einer leeren Eingabe werden 2 Stunden zur Startzeit dazugezählt.",
} }
labels = { labels = {

View File

@@ -1,3 +1,5 @@
import datetime
from django.db import models from django.db import models
from django.db.models import Case, Q, When from django.db.models import Case, Q, When
from django.utils import timezone from django.utils import timezone
@@ -80,7 +82,32 @@ class ArticleManager(PublishedManager, models.Manager):
return self.published(public) return self.published(public)
def pinned(self, public=True): def pinned(self, public=True):
return self.published(public).filter(is_pinned=True).first() # Get date for pinned news that is max 1 month old.
post_date = datetime.date.today()
__month = post_date.month
__year = post_date.year
if __month != 0:
__month -= 1
else:
# If the current month is January, you get the date from December of previous year.
__month = 12
__year -= 1
post_date = post_date.replace(year=__year, month=__month)
# Get date for event posts that is max 7 days old.
event_date = datetime.date.today() - datetime.timedelta(7)
return (
self.published(public)
.filter(is_pinned=True)
.filter(
(Q(post_type="N") & Q(public_date__gt=post_date))
| (Q(post_type="E") & Q(event_end__date__gt=event_date))
)
.first()
)
class NewsManager(PublishedManager, models.Manager): class NewsManager(PublishedManager, models.Manager):