This commit is contained in:
2020-09-06 08:38:17 +00:00
20 changed files with 241 additions and 188 deletions

View File

@@ -1,16 +1,21 @@
from django.contrib.auth.models import User
from django.core.validators import ValidationError
from django.db import models
from django.db.models import Q
from django.urls import reverse
from django.utils import timezone
from django.utils.text import slugify
from django.utils.translation import gettext_lazy as _
from members.models import Member
from taggit.managers import TaggableManager
# import documents
from documents import ep
from .managers import (
PostManager, ArticleManager, NewsManager, AllEventManager, EventManager, FetMeetingManager
)
# from ckeditor_uploader import RichTextUploadingField
# import uuid
import re
@@ -22,65 +27,6 @@ import logging
logger = logging.getLogger('posts')
############
# MANAGERS #
############
class PostManager(models.Manager):
def get_queryset(self):
return super().get_queryset()
class ArticleManager(models.Manager):
"""
Provide a query set only for "Article"
regular fet meetings should not be contained in the news stream
"""
def get_queryset(self):
return super().get_queryset().filter(
Q(post_type='E')
| Q(post_type='N')
).order_by('-public_date')
class NewsManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(~Q(is_event=True))
class EventManager(models.Manager):
"""
Provide a query set only for "Events"
regular fet meetings should not be contained in the news stream
"""
def get_queryset(self):
return super().get_queryset().filter(
Q(is_event=True)
& ~Q(post_type='F')
).order_by('-public_date')
def get_all_events(self):
date_today = timezone.now().date()
return super().get_queryset().filter(
Q(is_event=True)
& Q(event_start__gt=date_today)
).order_by('-event_start')
def get_five_events(self):
return super().get_queryset().filter(
Q(is_event=True)
).order_by('-event_start')[:5]
class FetMeetingManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(Q(post_type='F'))
##########
# MODELS #
##########
class Category(models.Model):
# Titel des Posts
title = models.CharField(max_length=200)
@@ -128,7 +74,11 @@ class Post(models.Model):
]
post_type = models.CharField(max_length=1, choices=__choices, editable=False)
is_event = models.BooleanField(default=False)
# post is pinned at main page
is_pinned = models.BooleanField(default=False)
# post is hidden from newsfeed (e.g. about)
is_hidden = models.BooleanField(default=False)
# Zusatz Info wenn ein Event gepostet wird
event_start = models.DateTimeField('Event Start', null=True, blank=True)
@@ -147,7 +97,7 @@ class Post(models.Model):
# Managers
objects = PostManager()
article_objects = ArticleManager()
articles = ArticleManager()
def get_tags(self):
"""Returns assigned tags as a comma seperated list."""
@@ -191,10 +141,6 @@ class Post(models.Model):
def url(self):
return reverse('posts.show', kwargs={"id": self.slug})
@property
def author_member(self):
return Member.all_members.filter(nickname=self.author.username).first()
def save(self, *args, **kwargs):
"save the post with some defaults"
if (self.id is None) and (not self.slug):
@@ -253,7 +199,8 @@ class News(Post):
class Event(Post):
objects = EventManager()
only_events = EventManager()
all_events = AllEventManager()
class Meta:
proxy = True
@@ -276,8 +223,6 @@ class Event(Post):
raise ValidationError(_('Das Ende des Events liegt vor dem Beginn.'))
def save(self, *args, **kwargs):
self.is_event = True
if not self.post_type:
self.post_type = 'E'
@@ -296,12 +241,15 @@ class FetMeeting(Event):
def clean(self):
if self.event_start is None:
raise ValidationError(_('Das Datum des Events fehlt.'))
elif (self.event_end) and (self.event_end < self.event_start):
raise ValidationError(_('Das Ende des Events liegt vor dem Beginn.'))
slug = slugify(self.event_start.date()) + "-" + slugify("Fachschaftssitzung")
#dieser Check verhindert erneutes speichern
#if Post.objects.filter(slug=slug).count() != 0:
# raise ValidationError(_('Es existiert bereits eine Sitzung mit demselben Datum.'))
if Post.objects.filter(slug=slug).exists():
if Post.objects.get(slug=slug).id != self.id:
raise ValidationError(_('Es existiert bereits eine Sitzung mit demselben Datum.'))
def save(self, *args, **kwargs):
self.title = "Fachschaftssitzung"