no functional changes
Formatting updated to pep8
This commit is contained in:
@@ -44,7 +44,7 @@ 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'
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -29,12 +29,8 @@ 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):
|
||||
@@ -45,12 +41,8 @@ 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):
|
||||
@@ -61,7 +53,7 @@ class Member(models.Model):
|
||||
|
||||
__choices = [
|
||||
('A', _('Active')),
|
||||
('P', _('Pension'))
|
||||
('P', _('Pension')),
|
||||
]
|
||||
role = models.CharField(max_length=1, choices=__choices, default='A')
|
||||
|
||||
@@ -76,12 +68,12 @@ class Member(models.Model):
|
||||
))
|
||||
phone_regex = RegexValidator(
|
||||
regex=r'^\+?1?\d{9,15}$',
|
||||
message=phone_error_msg
|
||||
message=phone_error_msg,
|
||||
)
|
||||
phone = models.CharField(
|
||||
validators=[phone_regex],
|
||||
max_length=17,
|
||||
blank=True
|
||||
blank=True,
|
||||
)
|
||||
|
||||
address = models.TextField(null=True, blank=True)
|
||||
@@ -112,7 +104,7 @@ class MemberSerializer(serializers.HyperlinkedModelSerializer):
|
||||
'mailaccount',
|
||||
'role',
|
||||
'description',
|
||||
'image'
|
||||
'image',
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -13,10 +13,11 @@ class MyPostForm(forms.ModelForm):
|
||||
|
||||
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
|
||||
@@ -25,7 +26,8 @@ class MyNewsForm(MyPostForm):
|
||||
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:
|
||||
@@ -36,7 +38,7 @@ class MyEventForm(MyPostForm):
|
||||
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
|
||||
@@ -44,13 +46,14 @@ class MyEventForm(MyPostForm):
|
||||
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
|
||||
@@ -8,8 +8,8 @@ from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from taggit.managers import TaggableManager
|
||||
|
||||
#from ckeditor_uploader import RichTextUploadingField
|
||||
import uuid
|
||||
# from ckeditor_uploader import RichTextUploadingField
|
||||
# import uuid
|
||||
import re
|
||||
from rest_framework import serializers
|
||||
|
||||
@@ -27,6 +27,7 @@ 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,7 +66,7 @@ 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)
|
||||
|
||||
@@ -72,8 +76,9 @@ class Category(models.Model):
|
||||
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
|
||||
@@ -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,12 +150,13 @@ 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
|
||||
@@ -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:
|
||||
@@ -186,9 +193,10 @@ class PostSerializer(serializers.HyperlinkedModelSerializer):
|
||||
'image',
|
||||
'event_start',
|
||||
'event_end',
|
||||
'is_fetsitzung'
|
||||
'is_fetsitzung',
|
||||
]
|
||||
|
||||
|
||||
class News(Post):
|
||||
objects = NewsManager()
|
||||
|
||||
@@ -204,6 +212,7 @@ class News(Post):
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class Event(Post):
|
||||
objects = EventManager()
|
||||
|
||||
@@ -218,6 +227,7 @@ class Event(Post):
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class FetMeeting(Event):
|
||||
objects = FetMeetingManager()
|
||||
|
||||
@@ -232,13 +242,13 @@ class FetMeeting(Event):
|
||||
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
|
||||
|
||||
|
||||
@@ -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-]+)', '<a href="/posts/t/\g<1>">#\g<1></a>', value))
|
||||
# return "Tag to url: %s" % value
|
||||
return mark_safe(re.sub(r'\#([\d\w-]+)', r'<a href="/posts/t/\g<1>">#\g<1></a>', value))
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
from django.test import TestCase
|
||||
# from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
||||
@@ -2,7 +2,7 @@ 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/<str:tag>', views.tags, name='posts.tags'),
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user