Introduces new forms, models, admin integrations
Post
____|___
| |
News Event // Events + News = Article, ArticleManager shows without FetMeeting!!
|
FetMeeting
This commit is contained in:
@@ -11,25 +11,48 @@ import re
|
||||
from rest_framework import serializers
|
||||
from django.db.models import Q
|
||||
|
||||
from datetime import timedelta
|
||||
|
||||
#TODO: is_fetsitzung -> is_fetmeeting
|
||||
|
||||
############
|
||||
# MANAGERS #
|
||||
############
|
||||
|
||||
class PostManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return super().get_queryset()
|
||||
|
||||
class NewsPostManager(models.Manager):
|
||||
class ArticleManager(models.Manager):
|
||||
"""
|
||||
Provide a query set only for "News"
|
||||
regular meetings should not be contained in the news stream
|
||||
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(is_fetsitzung=True))
|
||||
|
||||
class EventManager(models.Manager):
|
||||
class NewsManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().filter(Q(is_event=True))
|
||||
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(is_fetsitzung=False))
|
||||
|
||||
class FetMeetingManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().filter(Q(is_fetsitzung=True))
|
||||
|
||||
##########
|
||||
# MODELS #
|
||||
##########
|
||||
|
||||
class Category(models.Model):
|
||||
title =models.CharField(max_length=200) # Titel des Posts
|
||||
title = models.CharField(max_length=200) # Titel des Posts
|
||||
subtitle = models.CharField(max_length=500, null=True, blank=True) # subtitle
|
||||
slug = models.SlugField(unique=True,null=True,blank=True) # Slug = Text Basierter url bestandteil zb Fetsitzung 22.1.2020 --> fetsitzung_22_1_2020 für Url
|
||||
image = models.ImageField(null=True,blank=True) # Ein Haupt Bild für den Post
|
||||
@@ -39,12 +62,11 @@ class Category(models.Model):
|
||||
verbose_name = "Category"
|
||||
verbose_name_plural = "Categories"
|
||||
|
||||
# Create your models here.
|
||||
class Post(models.Model):
|
||||
# id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
legacy_id=models.IntegerField(null=True)
|
||||
legacy_id = models.IntegerField(null=True)
|
||||
legacy_rubrik_id = models.IntegerField(null=True)
|
||||
title =models.CharField(max_length=200) # Titel des Posts
|
||||
title = models.CharField(max_length=200) # Titel des Posts
|
||||
subtitle = models.CharField(max_length=500, null=True, blank=True) # subtitle
|
||||
slug = models.SlugField(unique=True,null=True,blank=True) # Slug = Text Basierter url bestandteil zb Fetsitzung 22.1.2020 --> fetsitzung_22_1_2020 für Url
|
||||
body = models.TextField(null=True, blank=True) # Body Text Artikel Text soll später mit WYSIWG Editor bearbeitet werden
|
||||
@@ -55,13 +77,13 @@ class Post(models.Model):
|
||||
|
||||
imported_from = models.CharField(max_length=200, null=True, blank=True) # Titel des Posts
|
||||
|
||||
is_fetsitzung=models.BooleanField(default=False)
|
||||
is_event=models.BooleanField(default=False)
|
||||
is_fetsitzung = models.BooleanField(default=False)
|
||||
is_event = models.BooleanField(default=False)
|
||||
|
||||
# Zusatz Info wenn ein Event gepostet wird
|
||||
event_start=models.DateTimeField('Event Start', null=True,blank=True)
|
||||
event_end=models.DateTimeField('Event Ende', null=True,blank=True)
|
||||
event_place=models.CharField(max_length=200, null=True,blank=True)
|
||||
event_start = models.DateTimeField('Event Start', null=True,blank=True)
|
||||
event_end = models.DateTimeField('Event Ende', null=True,blank=True)
|
||||
event_place = models.CharField(max_length=200, null=True,blank=True)
|
||||
|
||||
# Dokumente v.a. fuer Sitzungen
|
||||
has_protocol = models.BooleanField(default=False)
|
||||
@@ -70,10 +92,12 @@ class Post(models.Model):
|
||||
agenda_key = models.CharField(max_length=200, null=True,blank=True)
|
||||
|
||||
# TimeStamps
|
||||
date_modified=models.DateTimeField(auto_now=True)
|
||||
date_created=models.DateTimeField(auto_now_add=True)
|
||||
objects=PostManager()
|
||||
news_objects=NewsPostManager()
|
||||
date_modified = models.DateTimeField(auto_now=True)
|
||||
date_created = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
# Managers
|
||||
objects = PostManager()
|
||||
news_objects = ArticleManager()
|
||||
|
||||
def get_tags(self):
|
||||
"""Returns assigned tags as a comma seperated list."""
|
||||
@@ -95,30 +119,77 @@ class Post(models.Model):
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
"save the post with some defaults"
|
||||
if self.id is None and (self.slug is None or self.slug ==""):
|
||||
self.slug=slugify(self.public_date.date())+"-"+slugify(self.title)
|
||||
if not self.event_start is None:
|
||||
self.is_event=True
|
||||
if (self.id is None) and (not self.slug):
|
||||
self.slug = slugify(self.public_date.date()) + "-" + slugify(self.title)
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
self.tags.set(*re.findall(r'\#([\d\w-]+)', str(self.subtitle)),*re.findall(r'\#([\d\w-]+)', str(self.title)))
|
||||
self.tags.set(*re.findall(r'\#([\d\w-]+)', str(self.subtitle)),
|
||||
*re.findall(r'\#([\d\w-]+)', str(self.title)))
|
||||
|
||||
def __str__(self):
|
||||
return "Post (%s, %s): %s " %(self.slug, self.public_date.strftime("%d.%m.%Y"), self.title)
|
||||
|
||||
|
||||
|
||||
class PostSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = Post
|
||||
fields = ['slug','title','subtitle', 'body','url','public_date', 'legacy_id','image', 'event_start','event_end','is_fetsitzung']
|
||||
|
||||
class Event(Post):
|
||||
fields = ['slug', 'title', 'subtitle', 'body', 'url', 'public_date',
|
||||
'legacy_id', 'image', 'event_start', 'event_end',
|
||||
'is_fetsitzung']
|
||||
class News(Post):
|
||||
class Meta:
|
||||
proxy=True
|
||||
objects=EventManager()
|
||||
proxy = True
|
||||
|
||||
verbose_name = "News"
|
||||
verbose_name_plural = "News"
|
||||
|
||||
objects = NewsManager()
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.is_event=True
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
class Event(Post):
|
||||
class Meta:
|
||||
proxy = True
|
||||
objects = EventManager()
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.is_event = True
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
class FetMeeting(Event):
|
||||
class Meta:
|
||||
proxy = True
|
||||
|
||||
verbose_name = "Fet Sitzung"
|
||||
verbose_name_plural = "Fet Sitzungen"
|
||||
|
||||
objects = FetMeetingManager()
|
||||
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.title = "Fachschaftssitzung"
|
||||
self.slug = slugify(self.event_start.date()) + "-" + slugify(self.title)
|
||||
self.body ="TODO: Agenda + Protokoll Link"
|
||||
|
||||
#TODO
|
||||
#self.image
|
||||
|
||||
self.has_protocol = True
|
||||
self.has_agenda = True
|
||||
|
||||
#TODO
|
||||
# self.protocol_key
|
||||
# self.agenda_key
|
||||
|
||||
self.is_fetsitzung = True
|
||||
|
||||
if not self.event_place:
|
||||
self.event_place = "FET"
|
||||
|
||||
# make duration 2 hours if not specified otherwise
|
||||
if not self.event_end:
|
||||
self.event_end = self.event_start + timedelta(hours=2)
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
Reference in New Issue
Block a user