Merge branch 'master' of https://git.fet.at/bofh/fet2020
This commit is contained in:
@@ -3,14 +3,14 @@ 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.text import slugify
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from taggit.managers import TaggableManager
|
||||
|
||||
#from ckeditor_uploader import RichTextUploadingField
|
||||
import uuid
|
||||
import re
|
||||
# from ckeditor_uploader import RichTextUploadingField
|
||||
# import uuid
|
||||
import re
|
||||
from rest_framework import serializers
|
||||
|
||||
from datetime import timedelta
|
||||
@@ -26,7 +26,8 @@ logger = logging.getLogger('posts')
|
||||
class PostManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return super().get_queryset()
|
||||
|
||||
|
||||
|
||||
class ArticleManager(models.Manager):
|
||||
"""
|
||||
Provide a query set only for "Article"
|
||||
@@ -35,10 +36,12 @@ class ArticleManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().filter(Q(post_type='E') | Q(post_type='N'))
|
||||
|
||||
|
||||
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"
|
||||
@@ -47,6 +50,7 @@ class EventManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().filter(Q(is_event=True) & Q(post_type='E'))
|
||||
|
||||
|
||||
class FetMeetingManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().filter(Q(post_type='F'))
|
||||
@@ -62,18 +66,19 @@ class Category(models.Model):
|
||||
|
||||
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)
|
||||
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)
|
||||
# Titel des Posts
|
||||
@@ -88,11 +93,11 @@ class Post(models.Model):
|
||||
image = models.ImageField(null=True, blank=True)
|
||||
# Wer hat das geschrieben
|
||||
author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
||||
|
||||
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)
|
||||
|
||||
__choices = [
|
||||
@@ -118,11 +123,11 @@ class Post(models.Model):
|
||||
# TimeStamps
|
||||
date_modified = models.DateTimeField(auto_now=True)
|
||||
date_created = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
|
||||
# Managers
|
||||
objects = PostManager()
|
||||
article_objects = ArticleManager()
|
||||
|
||||
|
||||
def get_tags(self):
|
||||
"""Returns assigned tags as a comma seperated list."""
|
||||
return ",".join(self.tags.names())
|
||||
@@ -132,7 +137,7 @@ class Post(models.Model):
|
||||
if self.image:
|
||||
return self.image.url
|
||||
else:
|
||||
image=self.find_an_image()
|
||||
image = self.find_an_image()
|
||||
if image:
|
||||
return image.url
|
||||
else:
|
||||
@@ -145,16 +150,17 @@ class Post(models.Model):
|
||||
"find an image via another post"
|
||||
# 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()
|
||||
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()
|
||||
#for p in posts2:
|
||||
|
||||
# posts2=self.tags.similar_objects()
|
||||
# for p in posts2:
|
||||
# if p.image is not None:
|
||||
# return p.image
|
||||
return None
|
||||
|
||||
|
||||
@property
|
||||
def url(self):
|
||||
return reverse('posts.show', kwargs={"id": self.slug})
|
||||
@@ -170,7 +176,8 @@ class Post(models.Model):
|
||||
*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)
|
||||
return "Post (%s, %s): %s " % (self.slug, self.public_date.strftime("%d.%m.%Y"), self.title)
|
||||
|
||||
|
||||
class PostSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
@@ -185,10 +192,11 @@ class PostSerializer(serializers.HyperlinkedModelSerializer):
|
||||
'legacy_id',
|
||||
'image',
|
||||
'event_start',
|
||||
'event_end',
|
||||
'is_fetsitzung'
|
||||
'event_end',
|
||||
'is_fetsitzung',
|
||||
]
|
||||
|
||||
|
||||
class News(Post):
|
||||
objects = NewsManager()
|
||||
|
||||
@@ -197,19 +205,20 @@ class News(Post):
|
||||
|
||||
verbose_name = "News"
|
||||
verbose_name_plural = "News"
|
||||
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.post_type:
|
||||
self.post_type = 'N'
|
||||
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class Event(Post):
|
||||
objects = EventManager()
|
||||
|
||||
class Meta:
|
||||
proxy = True
|
||||
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.is_event = True
|
||||
|
||||
@@ -218,6 +227,7 @@ class Event(Post):
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class FetMeeting(Event):
|
||||
objects = FetMeetingManager()
|
||||
|
||||
@@ -231,14 +241,14 @@ class FetMeeting(Event):
|
||||
self.title = "Fachschaftssitzung"
|
||||
self.slug = slugify(self.event_start.date()) + "-" + slugify(self.title)
|
||||
self.body = "TODO: Agenda + Protokoll Link"
|
||||
|
||||
#TODO
|
||||
#self.image
|
||||
|
||||
# TODO
|
||||
# self.image
|
||||
|
||||
self.has_protocol = True
|
||||
self.has_agenda = True
|
||||
|
||||
#TODO
|
||||
|
||||
# TODO
|
||||
# self.protocol_key
|
||||
# self.agenda_key
|
||||
|
||||
@@ -252,4 +262,4 @@ class FetMeeting(Event):
|
||||
if not self.event_end:
|
||||
self.event_end = self.event_start + timedelta(hours=2)
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
Reference in New Issue
Block a user