diff --git a/fet2020/fet2020/middleware.py b/fet2020/fet2020/middleware.py
index 0a0eb6d6..00c34b27 100644
--- a/fet2020/fet2020/middleware.py
+++ b/fet2020/fet2020/middleware.py
@@ -1,15 +1,20 @@
-from django.contrib.auth.models import User
+# from django.contrib.auth.models import User
from django.contrib.auth.middleware import RemoteUserMiddleware
-import django
-#import logging
-#logger=logging.getLogger("django.request")
+# import django
+# import logging
+# logger=logging.getLogger("django.request")
+
class FETHeaderMiddleware(RemoteUserMiddleware):
- header="Remote-User"
+ header = "Remote-User"
+
def process_request(self, request):
- request.META[self.header]=request.META.get(self.header, request.headers.get(self.header,None))
+ request.META[self.header] = request.META.get(
+ self.header,
+ request.headers.get(self.header, None)
+ )
super().process_request(request)
if request.user.is_authenticated:
- request.user.is_admin=True
- request.user.is_superuser=True
- request.user.is_staff=True
\ No newline at end of file
+ request.user.is_admin = True
+ request.user.is_superuser = True
+ request.user.is_staff = True
diff --git a/fet2020/fet2020/settings.py b/fet2020/fet2020/settings.py
index ca13e1f7..746bc384 100644
--- a/fet2020/fet2020/settings.py
+++ b/fet2020/fet2020/settings.py
@@ -12,6 +12,23 @@ https://docs.djangoproject.com/en/3.0/ref/settings/
import os
+# Prints and logs are written to console
+# TODO: Change before release
+LOGGING = {
+ 'version': 1,
+ 'disable_existing_loggers': False,
+ 'handlers': {
+ 'console': {
+ 'class': 'logging.StreamHandler',
+ },
+ },
+ 'root': {
+ 'handlers': ['console'],
+ 'level': 'DEBUG',
+ },
+}
+
+
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@@ -28,14 +45,13 @@ DEBUG = True
ALLOWED_HOSTS = []
-DATA_UPLOAD_MAX_MEMORY_SIZE = 1024*1024*1024
+DATA_UPLOAD_MAX_MEMORY_SIZE = 1024 * 1024 * 1024
# Application definition
CKEDITOR_UPLOAD_PATH = 'upload'
INSTALLED_APPS = [
- 'posts.apps.PostsConfig',
- 'members.apps.MembersConfig',
'django.contrib.admin',
+ 'django.contrib.admindocs',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
@@ -47,7 +63,8 @@ INSTALLED_APPS = [
'rest_framework',
'django_filters',
'django_static_jquery_ui',
- 'django.contrib.admindocs'
+ 'posts.apps.PostsConfig',
+ 'members.apps.MembersConfig',
]
MIDDLEWARE = [
@@ -66,7 +83,10 @@ ROOT_URLCONF = 'fet2020.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': [os.path.join(BASE_DIR, 'templates'),os.path.join(BASE_DIR, 'templates_design1')],
+ 'DIRS': [
+ os.path.join(BASE_DIR, 'templates'),
+ os.path.join(BASE_DIR, 'templates_design1')
+ ],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
@@ -139,10 +159,8 @@ STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static_design1"),
]
-MEDIA_ROOT=os.path.join(BASE_DIR, 'files/')
-MEDIA_URL='/files/'
-
-
+MEDIA_ROOT = os.path.join(BASE_DIR, 'files/')
+MEDIA_URL = '/files/'
TAGGIT_FORCE_LOWERCASE = True
@@ -161,5 +179,4 @@ CKEDITOR_CONFIGS = {
},
],
}
-
}
diff --git a/fet2020/fet2020/urls.py b/fet2020/fet2020/urls.py
index e5e4cb3c..ac4ea36b 100644
--- a/fet2020/fet2020/urls.py
+++ b/fet2020/fet2020/urls.py
@@ -35,4 +35,4 @@ urlpatterns = [
path('ckeditor/', include('ckeditor_uploader.urls')),
path('api/', include(router.urls)),
path('members/', include('members.urls')),
-]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
+] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
diff --git a/fet2020/fet2020/views.py b/fet2020/fet2020/views.py
index a73cb2c6..ce495b72 100644
--- a/fet2020/fet2020/views.py
+++ b/fet2020/fet2020/views.py
@@ -1,22 +1,27 @@
from django.shortcuts import render
-from django.http import HttpResponse
+# from django.http import HttpResponse
from collections import deque
from posts.models import Post
def index(request):
- posts=deque(Post.article_objects.all())
- l=len(posts)
+ posts = deque(Post.article_objects.all())
+
def get_tags(lst):
for p in lst:
for t in list(p.tags.names()):
- yield "#"+ t
+ yield "#" + t
-
- t=set( t for t in get_tags(posts))
- if l>=1:
- featured_post=posts.popleft()
+ t = set(t for t in get_tags(posts))
+ if len(posts) >= 1:
+ featured_post = posts.popleft()
else:
- featured_post=0
+ featured_post = 0
- return render(request, 'home.html',{'posts':posts, 'featured_post':featured_post, "tags_list": ", ".join(t)})
+ context = {
+ 'posts': posts,
+ 'featured_post': featured_post,
+ 'tags_list': ", ".join(t)
+ }
+
+ return render(request, 'home.html', context)
diff --git a/fet2020/members/admin.py b/fet2020/members/admin.py
index c417cf50..ef324319 100644
--- a/fet2020/members/admin.py
+++ b/fet2020/members/admin.py
@@ -21,14 +21,17 @@ class MemberRoleFilter(admin.SimpleListFilter):
elif self.value() == 'P':
return queryset.filter(role='P')
+
class JobMemberInline(admin.TabularInline):
model = JobMember
extra = 0
+
class JobOverviewInline(JobMemberInline):
verbose_name = "Tätigkeit"
verbose_name_plural = "Tätigkeitsübersicht"
+
class ActiveMemberInline(JobMemberInline):
verbose_name = "Mitglied"
verbose_name_plural = "Aktive Mitglieder Liste"
@@ -36,6 +39,7 @@ class ActiveMemberInline(JobMemberInline):
def get_queryset(self, request):
return JobMember.active_member.all()
+
class InactiveMemberInline(JobMemberInline):
verbose_name = "Mitglied"
verbose_name_plural = "Inaktive Mitglieder Liste"
@@ -43,25 +47,29 @@ class InactiveMemberInline(JobMemberInline):
def get_queryset(self, request):
return JobMember.inactive_member.all()
+
class JobInline(admin.TabularInline):
model = Job
extra = 0
+
class MyMemberAdmin(admin.ModelAdmin):
form = MyMemberForm
model = Member
list_display = ['nickname', 'firstname', 'surname', 'mailaccount', 'role']
inlines = (JobOverviewInline,)
- search_fields = ['firstname', 'surname','nickname','mailaccount']
+ search_fields = ['firstname', 'surname', 'nickname', 'mailaccount']
list_filter = [MemberRoleFilter]
def save_model(self, request, obj, form, change):
obj.author = request.user
super().save_model(request, obj, form, change)
+
admin.site.register(Member, MyMemberAdmin)
+
class MyJobAdmin(admin.ModelAdmin):
form = MyJobForm
model = Job
@@ -74,8 +82,10 @@ class MyJobAdmin(admin.ModelAdmin):
obj.author = request.user
super().save_model(request, obj, form, change)
+
admin.site.register(Job, MyJobAdmin)
+
class MyJobGroupAdmin(admin.ModelAdmin):
form = MyJobGroupForm
model = JobGroup
@@ -88,4 +98,5 @@ class MyJobGroupAdmin(admin.ModelAdmin):
obj.author = request.user
super().save_model(request, obj, form, change)
-admin.site.register(JobGroup, MyJobGroupAdmin)
\ No newline at end of file
+
+admin.site.register(JobGroup, MyJobGroupAdmin)
diff --git a/fet2020/members/forms.py b/fet2020/members/forms.py
index c097cc63..2e6927ae 100644
--- a/fet2020/members/forms.py
+++ b/fet2020/members/forms.py
@@ -20,16 +20,29 @@ class MyMemberForm(forms.ModelForm):
'address'
]
- widgets = {'description': CKEditorUploadingWidget(config_name='default')}
+ widgets = {
+ 'description': CKEditorUploadingWidget(config_name='default')
+ }
+
class MyJobForm(forms.ModelForm):
class Meta:
model = Job
- fields = ['name', 'shortterm', 'slug', 'job_group', 'description', 'image']
+ fields = [
+ 'name',
+ 'shortterm',
+ 'slug',
+ 'job_group',
+ 'description',
+ 'image'
+ ]
+
+ widgets = {
+ 'description': CKEditorUploadingWidget(config_name='default')
+ }
- widgets = {'description': CKEditorUploadingWidget(config_name='default')}
class MyJobGroupForm(forms.ModelForm):
class Meta:
model = JobGroup
- fields = ['name', 'shortterm', 'is_pinned']
\ No newline at end of file
+ fields = ['name', 'shortterm', 'is_pinned']
diff --git a/fet2020/members/models.py b/fet2020/members/models.py
index ee1546db..9365d068 100644
--- a/fet2020/members/models.py
+++ b/fet2020/members/models.py
@@ -6,7 +6,7 @@ from django.utils.text import slugify
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
-import uuid
+# import uuid
from datetime import timedelta
@@ -15,10 +15,12 @@ class MemberManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(role='A')
+
class PensionManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(role='P')
+
class ActiveMemberManager(models.Manager):
'''
return a list of active member, and members who are still working
@@ -27,12 +29,9 @@ class ActiveMemberManager(models.Manager):
date_today = timezone.now().date()
return super().get_queryset().filter(
- Q(member__role='A') &
- (
- Q(job_end__gt=date_today) |
- Q(job_end__isnull=True)
- )
- )
+ Q(member__role='A')
+ & (Q(job_end__gt=date_today) | Q(job_end__isnull=True)))
+
class InactiveMemberManager(models.Manager):
'''
@@ -42,12 +41,9 @@ class InactiveMemberManager(models.Manager):
date_today = timezone.now().date()
return super().get_queryset().filter(
- Q(member__role='P') |
- (
- Q(job_end__lt=date_today + timedelta(days=1)) &
- Q(job_end__isnull=False)
- )
- )
+ Q(member__role='P')
+ | (Q(job_end__lt=date_today + timedelta(days=1)) & Q(job_end__isnull=False)))
+
class Member(models.Model):
firstname = models.CharField(max_length=128)
@@ -57,21 +53,28 @@ class Member(models.Model):
__choices = [
('A', _('Active')),
- ('P', _('Pension'))
+ ('P', _('Pension')),
]
- role = models.CharField(max_length=1, choices= __choices, default='A')
+ role = models.CharField(max_length=1, choices=__choices, default='A')
description = models.TextField(null=True, blank=True)
image = models.ImageField(null=True, blank=True)
birthday = models.DateField(null=True, blank=True)
- phone_error_msg =_((
+ phone_error_msg = _((
"Phone number must be entered in the format: "
"+999999999'. Up to 15 digits allowed."
))
- phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message=phone_error_msg)
- phone = models.CharField(validators=[phone_regex], max_length=17, blank=True)
+ phone_regex = RegexValidator(
+ regex=r'^\+?1?\d{9,15}$',
+ message=phone_error_msg,
+ )
+ phone = models.CharField(
+ validators=[phone_regex],
+ max_length=17,
+ blank=True,
+ )
address = models.TextField(null=True, blank=True)
@@ -90,6 +93,7 @@ class Member(models.Model):
def __str__(self):
return self.firstname + " " + self.surname
+
class MemberSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Member
@@ -100,9 +104,10 @@ class MemberSerializer(serializers.HyperlinkedModelSerializer):
'mailaccount',
'role',
'description',
- 'image'
+ 'image',
]
+
class JobGroup(models.Model):
name = models.CharField(max_length=128)
shortterm = models.CharField(max_length=128)
@@ -111,6 +116,7 @@ class JobGroup(models.Model):
def __str__(self):
return self.name
+
class Job(models.Model):
name = models.CharField(max_length=128)
shortterm = models.CharField(max_length=128)
@@ -139,6 +145,7 @@ class Job(models.Model):
def __str__(self):
return self.shortterm
+
class JobMember(models.Model):
member = models.ForeignKey(
Member,
@@ -166,4 +173,4 @@ class JobMember(models.Model):
jobmember = models.Manager()
active_member = ActiveMemberManager()
- inactive_member = InactiveMemberManager()
\ No newline at end of file
+ inactive_member = InactiveMemberManager()
diff --git a/fet2020/members/tests.py b/fet2020/members/tests.py
index 7ce503c2..a79ca8be 100644
--- a/fet2020/members/tests.py
+++ b/fet2020/members/tests.py
@@ -1,3 +1,3 @@
-from django.test import TestCase
+# from django.test import TestCase
# Create your tests here.
diff --git a/fet2020/members/urls.py b/fet2020/members/urls.py
index 410b47d1..cb09cf40 100644
--- a/fet2020/members/urls.py
+++ b/fet2020/members/urls.py
@@ -5,4 +5,4 @@ from . import views
urlpatterns = [
path('', views.index, name='members.index'),
-]
\ No newline at end of file
+]
diff --git a/fet2020/members/views.py b/fet2020/members/views.py
index 73fb47a6..f4fcc17c 100644
--- a/fet2020/members/views.py
+++ b/fet2020/members/views.py
@@ -1,5 +1,5 @@
from django.shortcuts import render
-from django.http import HttpResponse
+# from django.http import HttpResponse
from collections import deque
@@ -7,11 +7,11 @@ from .models import Member, Job, JobMember, JobGroup, MemberSerializer
from rest_framework import viewsets
from rest_framework import permissions
-from django_filters.rest_framework import DjangoFilterBackend
+# from django_filters.rest_framework import DjangoFilterBackend
def index(request):
- #members = deque(Member.all_members.all())
+ # members = deque(Member.all_members.all())
members = deque(Member.all_members.all())
jobmembers = deque(JobMember.jobmember.all())
jobs = deque(Job.objects.all())
@@ -19,13 +19,14 @@ def index(request):
context = {
"members": members,
- "jobmembers" : jobmembers,
- "jobgroups" : jobgroups,
- "jobs" : jobs,
+ "jobmembers": jobmembers,
+ "jobgroups": jobgroups,
+ "jobs": jobs,
}
return render(request, 'members/index.html', context)
+
class MemberViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
@@ -34,9 +35,9 @@ class MemberViewSet(viewsets.ModelViewSet):
serializer_class = MemberSerializer
permission_classes = [permissions.IsAuthenticated]
- #filter_backends = [DjangoFilterBackend]
- #filterset_fields = ['legacy_id', 'slug','legacy_rubrik_id']
- lookup_field='name'
+ # filter_backends = [DjangoFilterBackend]
+ # filterset_fields = ['legacy_id', 'slug','legacy_rubrik_id']
+ lookup_field = 'name'
def pre_save(self, obj):
- obj.image = self.request.FILES.get('image')
\ No newline at end of file
+ obj.image = self.request.FILES.get('image')
diff --git a/fet2020/posts/admin.py b/fet2020/posts/admin.py
index e1ecc8fa..db3a3d74 100644
--- a/fet2020/posts/admin.py
+++ b/fet2020/posts/admin.py
@@ -1,5 +1,5 @@
-import django.contrib.auth.admin
-import django.contrib.auth.models
+# import django.contrib.auth.admin
+# import django.contrib.auth.models
import taggit.admin
from django.contrib import admin, auth
@@ -33,21 +33,27 @@ class MyPostAdmin(admin.ModelAdmin):
"jquery-ui/jquery-ui.min.js",
]
+
class MyEventAdmin(MyPostAdmin):
form = MyEventForm
model = Event
list_display = ['title', 'subtitle', 'slug', 'event_start', 'public_date']
+
admin.site.register(Event, MyEventAdmin)
+
class MyNewsAdmin(MyPostAdmin):
form = MyNewsForm
model = News
+
admin.site.register(News, MyNewsAdmin)
+
class MyFetMeetingAdmin(MyEventAdmin):
form = MyFetMeetingForm
model = FetMeeting
-admin.site.register(FetMeeting, MyFetMeetingAdmin)
\ No newline at end of file
+
+admin.site.register(FetMeeting, MyFetMeetingAdmin)
diff --git a/fet2020/posts/forms.py b/fet2020/posts/forms.py
index af918ed0..5f06e7c6 100644
--- a/fet2020/posts/forms.py
+++ b/fet2020/posts/forms.py
@@ -1,4 +1,4 @@
-from ckeditor_uploader.widgets import CKEditorUploadingWidget
+from ckeditor_uploader.widgets import CKEditorUploadingWidget
from django import forms
from .models import Post, Event, News, FetMeeting
@@ -8,49 +8,52 @@ class MyPostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'subtitle', 'tags', 'image', 'body', 'slug', 'author']
-
+
widgets = {'body': CKEditorUploadingWidget(config_name='default')}
class Media:
js = (
- 'js/auto_slug.js', # automatic slag completion via ajax
- 'js/tag_completion.js', # to get a list for tag autocompletion via ajax
+ 'js/auto_slug.js', # automatic slag completion via ajax
+ 'js/tag_completion.js', # to get a list for tag autocompletion via ajax
)
+
class MyNewsForm(MyPostForm):
class Meta:
model = News
fields = ['title', 'subtitle', 'tags', 'image', 'body', 'slug', 'author']
-
+
widgets = {'body': CKEditorUploadingWidget(config_name='default')}
-
+
def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs) # to get the self.fields set
+ super().__init__(*args, **kwargs) # to get the self.fields set
+
class MyEventForm(MyPostForm):
class Meta:
model = Event
fields = ['title', 'subtitle', 'tags', 'image', 'body',
'event_start', 'event_end', 'event_place', 'slug', 'author']
-
+
widgets = {'body': CKEditorUploadingWidget(config_name='default')}
-
+
def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs) # to get the self.fields set
+ super().__init__(*args, **kwargs) # to get the self.fields set
self.fields['event_start'].required = True
self.fields['event_end'].required = True
-
+
if 'event_place' in self.fields:
self.fields['event_place'].required = True
+
class MyFetMeetingForm(MyEventForm):
class Meta:
model = FetMeeting
fields = ['event_start', 'event_end', 'tags']
-
+
def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs) # to get the self.fields set
+ super().__init__(*args, **kwargs) # to get the self.fields set
self.fields['event_start'].required = True
- self.fields['event_end'].required = False
\ No newline at end of file
+ self.fields['event_end'].required = False
diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py
index 97ffe519..133bbba1 100644
--- a/fet2020/posts/models.py
+++ b/fet2020/posts/models.py
@@ -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)
\ No newline at end of file
+ super().save(*args, **kwargs)
diff --git a/fet2020/posts/templatetags/post_helpers.py b/fet2020/posts/templatetags/post_helpers.py
index 2e04c7d2..93b171b8 100644
--- a/fet2020/posts/templatetags/post_helpers.py
+++ b/fet2020/posts/templatetags/post_helpers.py
@@ -5,9 +5,8 @@ from django.utils.safestring import mark_safe
register = template.Library()
-
@register.filter(is_safe=True)
@stringfilter
def tags_to_url(value):
- #return "Tag to url: %s" % value
- return mark_safe(re.sub(r'\#([\d\w-]+)', '#\g<1>', value))
\ No newline at end of file
+ # return "Tag to url: %s" % value
+ return mark_safe(re.sub(r'\#([\d\w-]+)', r'#\g<1>', value))
diff --git a/fet2020/posts/tests.py b/fet2020/posts/tests.py
index 7ce503c2..a79ca8be 100644
--- a/fet2020/posts/tests.py
+++ b/fet2020/posts/tests.py
@@ -1,3 +1,3 @@
-from django.test import TestCase
+# from django.test import TestCase
# Create your tests here.
diff --git a/fet2020/posts/urls.py b/fet2020/posts/urls.py
index 2c612f57..db5dac31 100644
--- a/fet2020/posts/urls.py
+++ b/fet2020/posts/urls.py
@@ -2,10 +2,10 @@ from django.urls import path
from . import views
-urlpatterns=[
+urlpatterns = [
path('func/tag_complete', views.tag_complete),
path('func/slug_calc', views.slug_calc),
path('t/', views.tags, name='posts.tags'),
path('', views.index, name='posts.index'),
path('', views.show, name='posts.show'),
-]
\ No newline at end of file
+]
diff --git a/fet2020/posts/views.py b/fet2020/posts/views.py
index 6a8b5f9d..9823d451 100644
--- a/fet2020/posts/views.py
+++ b/fet2020/posts/views.py
@@ -1,13 +1,13 @@
from django.shortcuts import render
-from django.http import HttpResponse, JsonResponse
+from django.http import HttpResponse, JsonResponse, HttpResponseServerError
from django_filters.rest_framework import DjangoFilterBackend
-from django.core.cache import cache
+# from django.core.cache import cache
from django.utils.text import slugify
from django.utils import timezone
from taggit.models import Tag
from rest_framework import viewsets
-from rest_framework import permissions
+# from rest_framework import permissions
from .models import Post, PostSerializer
@@ -20,26 +20,28 @@ from collections import deque
def index(request):
posts = deque(Post.objects.order_by('-public_date').all())
- f = lambda p: p.tags
+
+ def f(p):
+ return p.tags
t = map(f, posts)
return render(request, 'posts/index.html', {"posts": posts, "tags_list": t})
-def tags(request,tag=""):
+def tags(request, tag=""):
posts = deque(Post.objects.filter(tags__name=tag))
return render(request, 'posts/index.html', {"posts": posts, "tags_list": None})
-def show(request,id=None):
+def show(request, id=None):
if id.isdigit() or id is int:
p = Post.objects.get(id=int(id))
- elif id != "" and not id is None:
+ elif id != "" and id is not None:
p = Post.objects.get(slug=(id))
context = {
"post": p,
- "next": get_next_dict().get(p.slug,None),
+ "next": get_next_dict().get(p.slug, None),
"related_posts": p.tags.similar_objects()
}
return render(request, 'posts/show.html', context)
@@ -77,7 +79,7 @@ def tag_complete(request):
tag_objects = Tag.objects.filter(name__istartswith=term)
- tag_array =[]
+ tag_array = []
for elem in tag_objects:
tag_array.append(elem.name)
@@ -87,15 +89,15 @@ def tag_complete(request):
def get_next_dict():
- #TODO: Docstring
+ # TODO: Docstring
posts = Post.article_objects.order_by('-public_date').values('slug')
print(posts)
d = {}
print(d)
- for k,v in enumerate(posts):
+ for k, v in enumerate(posts):
if k == len(posts) - 1:
break
- d[v['slug']] = posts[k+1]['slug']
+ d[v['slug']] = posts[k + 1]['slug']
print(d)
return d
@@ -106,9 +108,9 @@ class PostViewSet(viewsets.ModelViewSet):
"""
queryset = Post.objects.all().order_by('-public_date')
serializer_class = PostSerializer
- #permission_classes = [permissions.IsAuthenticated]
+ # permission_classes = [permissions.IsAuthenticated]
filter_backends = [DjangoFilterBackend]
- filterset_fields = ['legacy_id', 'slug','legacy_rubrik_id']
+ filterset_fields = ['legacy_id', 'slug', 'legacy_rubrik_id']
lookup_field = 'slug'
def pre_save(self, obj):