diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py index 4d919233..4cab3d7f 100644 --- a/fet2020/posts/models.py +++ b/fet2020/posts/models.py @@ -1,22 +1,22 @@ -from django.db import models from django.contrib.auth.models import User -from taggit.managers import TaggableManager +from django.db import models +from django.db.models import Q from django.utils.text import slugify +from django.utils import timezone from django.urls import reverse +from taggit.managers import TaggableManager + #from ckeditor_uploader import RichTextUploadingField -import django import uuid import re from rest_framework import serializers -from django.db.models import Q from datetime import timedelta import logging logger = logging.getLogger('posts') -#TODO: is_fetsitzung -> is_fetmeeting ############ # MANAGERS # @@ -55,44 +55,57 @@ class FetMeetingManager(models.Manager): ########## class Category(models.Model): - 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 - tags = TaggableManager(blank=True) # Tags + # Titel des Posts + title = models.CharField(max_length=200) + + subtitle = models.CharField(max_length=500, null=True, blank=True) + # Slug = Text Basierter url bestandteil zb Fetsitzung 22.1.2020 --> fetsitzung_22_1_2020 für Url + slug = models.SlugField(unique=True,null=True,blank=True) + # Ein Haupt Bild für den Post + image = models.ImageField(null=True, blank=True) + + tags = TaggableManager(blank=True) class Meta: verbose_name = "Category" verbose_name_plural = "Categories" class Post(models.Model): - # id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + #id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) legacy_id = models.IntegerField(null=True) legacy_rubrik_id = models.IntegerField(null=True) - 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 - image = models.ImageField(null=True,blank=True) # Ein Haupt Bild für den Post - author = models.ForeignKey(User,on_delete=models.SET_NULL, null=True,blank=True) # Wer hat das geschrieben - tags = TaggableManager(blank=True) # Tags - public_date = models.DateField('date published',null=True,blank=True, default=django.utils.timezone.now) # Datum ab dem etwas öffentlich sein soll + # Titel des Posts + title = models.CharField(max_length=200) + subtitle = models.CharField(max_length=500, null=True, blank=True) + + # Slug = Text Basierter url bestandteil zb Fetsitzung 22.1.2020 --> fetsitzung_22_1_2020 für Url + slug = models.SlugField(unique=True, null=True, blank=True) + # Body Text Artikel Text soll später mit WYSIWG Editor bearbeitet werden + body = models.TextField(null=True, blank=True) + # Ein Haupt Bild für den Post + image = models.ImageField(null=True, blank=True) + # Wer hat das geschrieben + author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True) - imported_from = models.CharField(max_length=200, null=True, blank=True) # Titel des Posts + tags = TaggableManager(blank=True) + # Datum ab dem etwas öffentlich sein soll + public_date = models.DateField('date published', null=True, blank=True, default=timezone.now) + + imported_from = models.CharField(max_length=200, null=True, blank=True) 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) - has_agenda = models.BooleanField(default=False)# - protocol_key = models.CharField(max_length=200, null=True,blank=True) - agenda_key = models.CharField(max_length=200, null=True,blank=True) + has_agenda = models.BooleanField(default=False) + protocol_key = models.CharField(max_length=200, null=True, blank=True) + agenda_key = models.CharField(max_length=200, null=True, blank=True) # TimeStamps date_modified = models.DateTimeField(auto_now=True) @@ -122,9 +135,10 @@ class Post(models.Model): def find_an_image(self): "find an image via another post" - #ToDo: Explain why this image is selected on save of the image - posts1=Post.objects.filter(slug__in=self.tags.names()).filter(image__isnull=False)[0:1].all() # Query all posts that have a slug that equals one of the tags - if len(posts1)>0: + # TODO: Explain why this image is selected on save of the image + # Query all posts that have a slug that equals one of the tags + posts1 = Post.objects.filter(slug__in=self.tags.names()).filter(image__isnull=False)[0:1].all() + if len(posts1) > 0: return posts1.get().image #posts2=self.tags.similar_objects() @@ -153,9 +167,19 @@ class Post(models.Model): 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'] + fields = [ + 'slug', + 'title', + 'subtitle', + 'body', + 'url', + 'public_date', + 'legacy_id', + 'image', + 'event_start', + 'event_end', + 'is_fetsitzung' + ] class News(Post): class Meta: @@ -172,6 +196,7 @@ class News(Post): class Event(Post): class Meta: proxy = True + objects = EventManager() def save(self, *args, **kwargs): @@ -188,11 +213,10 @@ class FetMeeting(Event): 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" + self.body = "TODO: Agenda + Protokoll Link" #TODO #self.image