From c9491f4d43f84a2052fa1da9aca8c81eee773453 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 27 Aug 2020 15:54:21 +0000 Subject: [PATCH 01/11] fix merge conflict --- fet2020/documents/__init__.py | 3 +-- fet2020/posts/models.py | 5 ++++- fet2020/posts/views.py | 9 +-------- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/fet2020/documents/__init__.py b/fet2020/documents/__init__.py index b0633ced..95e83006 100644 --- a/fet2020/documents/__init__.py +++ b/fet2020/documents/__init__.py @@ -5,8 +5,7 @@ from django.utils.text import slugify import urllib.parse t = datetime.now() + timedelta(days=1) -SERVER_URL="https://etherpad2.2020.fet.at/" - +SERVER_URL = "https://etherpad2.2020.fet.at/" with open("/srv/andis_test/etherpad_test2/etherpad-lite/APIKEY.txt", "r") as f: diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py index 8ca3ddf3..c818d27f 100644 --- a/fet2020/posts/models.py +++ b/fet2020/posts/models.py @@ -235,12 +235,15 @@ class Event(Post): class Meta: proxy = True + @property - def event_start_month (self): + def event_start_month(self): return self.event_start.strftime("%b") + @property def event_start_day(self): return self.event_start.strftime("%d") + def save(self, *args, **kwargs): self.is_event = True diff --git a/fet2020/posts/views.py b/fet2020/posts/views.py index d9fa28a5..f0124de8 100644 --- a/fet2020/posts/views.py +++ b/fet2020/posts/views.py @@ -49,19 +49,13 @@ def show(request, id=None): } response = render(request, 'posts/show.html', context) response.set_cookie("HelloWorld", "TestWert", domain="https://etherpad2.2020.fet.at") -<<<<<<< HEAD - ep_sessid, expires=get_ep_sessionid(request) - response.set_cookie("sessionID",ep_sessid,expires=expires, domain=".2020.fet.at", path="/") - #response.set_cookie("express_sid",ep_sessid,expires=expires, domain="https://andis.2020.fet.at",path="/etherpad") - #response=add_ep_to_response(request, response ) -======= ep_sessid, expires = get_ep_sessionid(request) response.set_cookie( "sessionID", ep_sessid, expires=expires, domain=".2020.fet.at", - path="/etherpad" + path="/" ) ''' response.set_cookie( @@ -73,7 +67,6 @@ def show(request, id=None): ) ''' # response=add_ep_to_response(request, response ) ->>>>>>> a9b7ca5faead194ba253fadc59f6f1d83a8e5bc1 return response From 18d519c1571a1cb2e1a2ab702df17eb0d81c5a82 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 27 Aug 2020 16:55:55 +0000 Subject: [PATCH 02/11] add profile view of a member --- fet2020/members/urls.py | 5 +- fet2020/members/views.py | 71 +++++++++++++++---- fet2020/templates/members/index.html | 34 +++++---- fet2020/templates/members/jobs_list.html | 2 - fet2020/templates/members/members_list.html | 8 --- .../templates/members/partials/_member.html | 6 +- 6 files changed, 82 insertions(+), 44 deletions(-) diff --git a/fet2020/members/urls.py b/fet2020/members/urls.py index 9a379aa5..9f671530 100644 --- a/fet2020/members/urls.py +++ b/fet2020/members/urls.py @@ -5,6 +5,7 @@ from . import views urlpatterns = [ path('', views.index, name='members'), - path('', views.index), - path('jobs/', views.index), + path('', views.members_view), + path('jobs/', views.jobs_view), + path('member/', views.profile_view), ] diff --git a/fet2020/members/views.py b/fet2020/members/views.py index be26658b..746d6b22 100644 --- a/fet2020/members/views.py +++ b/fet2020/members/views.py @@ -10,35 +10,76 @@ from rest_framework import permissions # from django_filters.rest_framework import DjangoFilterBackend -def index(request, slug=None, filter=None): +def index(request, filter=None): job_group = deque(JobGroup.objects.all()) - job_list = [] members = None - if slug is not None: - job_names = JobMember.jobs.get_job_names(slug=slug) - active_members = JobMember.active_member.get_members_of_job(job_names=job_names) - inactive_members = JobMember.inactive_member.get_members_of_job(job_names=job_names) - - for idx, item in enumerate(job_names): - job_list.append((job_names[idx], active_members[idx], inactive_members[idx])) + if filter is None: + members = deque(Member.all_members.all()) + elif filter in Member.MemberRole: + members = deque(Member.all_members.filter(role=filter)) else: - if filter is None: - members = deque(Member.all_members.all()) - elif filter in Member.MemberRole: - members = deque(Member.all_members.filter(role=filter)) - else: - members = None + members = None + + context = { + "job_group": job_group, + "members": members, + } + + return render(request, 'members/index.html', context) + + +def jobs_view(request, slug=None): + job_group = deque(JobGroup.objects.all()) + job_list = [] + + job_names = JobMember.jobs.get_job_names(slug=slug) + active_members = JobMember.active_member.get_members_of_job(job_names=job_names) + inactive_members = JobMember.inactive_member.get_members_of_job(job_names=job_names) + + for idx, item in enumerate(job_names): + job_list.append((job_names[idx], active_members[idx], inactive_members[idx])) context = { "job_group": job_group, "job_list": job_list, + } + + return render(request, 'members/index.html', context) + + +def members_view(request, filter=None): + job_group = deque(JobGroup.objects.all()) + + if filter is None: + members = deque(Member.all_members.all()) + elif filter in Member.MemberRole: + members = deque(Member.all_members.filter(role=filter)) + else: + members = None + + context = { + "job_group": job_group, "members": members, } return render(request, 'members/index.html', context) +def profile_view(request, member_name=None): + job_group = deque(JobGroup.objects.all()) + member = None + + member = deque(Member.all_members.filter(mailaccount=member_name)) + + context = { + "job_group": job_group, + "member": member, + } + + return render(request, 'members/index.html', context) + + class MemberViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. diff --git a/fet2020/templates/members/index.html b/fet2020/templates/members/index.html index 7e4faf19..7e3fdb99 100644 --- a/fet2020/templates/members/index.html +++ b/fet2020/templates/members/index.html @@ -11,34 +11,38 @@ Aktive Mitglieder Inaktive Mitglieder {% for job in job_group %} - {{job.name}} + {{job.name}} {% endfor %} diff --git a/fet2020/templates/members/jobs_list.html b/fet2020/templates/members/jobs_list.html index 23ddb329..0955a987 100644 --- a/fet2020/templates/members/jobs_list.html +++ b/fet2020/templates/members/jobs_list.html @@ -1,6 +1,4 @@ -
- Aktuelle Mitglieder: {{active_members.count}}
{% for mem in active_members %} diff --git a/fet2020/templates/members/members_list.html b/fet2020/templates/members/members_list.html index b238a7b0..e97af0d6 100644 --- a/fet2020/templates/members/members_list.html +++ b/fet2020/templates/members/members_list.html @@ -1,6 +1,5 @@
-

Mitarbeiter Liste

Grid Style

{% for member in members %} @@ -16,11 +15,4 @@ {% include 'members/partials/_member.html' %} {% endfor %}
- -

Detail List

-
- {% for member in members %} - {% include 'members/partials/_member_details.html' %} - {% endfor %} -
diff --git a/fet2020/templates/members/partials/_member.html b/fet2020/templates/members/partials/_member.html index 9d598808..428e9a97 100644 --- a/fet2020/templates/members/partials/_member.html +++ b/fet2020/templates/members/partials/_member.html @@ -2,7 +2,9 @@ {# only thumb and name of member #} {% load thumbnail %} - -{% if member.image %}{% endif %} + +{% if member.image %} + +{% endif %}

{{member.nickname}}

{{member.firstname}} {{member.surname}}

\ No newline at end of file From 7faddf646828204a224b63e0187979506dc2f26a Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 27 Aug 2020 20:00:24 +0000 Subject: [PATCH 03/11] added local login from django database --- fet2020/fet2020/middleware.py | 4 +++- fet2020/fet2020/settings.py | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/fet2020/fet2020/middleware.py b/fet2020/fet2020/middleware.py index 00c34b27..dcffa50a 100644 --- a/fet2020/fet2020/middleware.py +++ b/fet2020/fet2020/middleware.py @@ -1,7 +1,7 @@ # from django.contrib.auth.models import User from django.contrib.auth.middleware import RemoteUserMiddleware # import django -# import logging +import logging # logger=logging.getLogger("django.request") @@ -13,7 +13,9 @@ class FETHeaderMiddleware(RemoteUserMiddleware): self.header, request.headers.get(self.header, None) ) + logger = logging.getLogger(__name__) super().process_request(request) + #logger.info('User: ' + str(request.user)) if request.user.is_authenticated: request.user.is_admin = True request.user.is_superuser = True diff --git a/fet2020/fet2020/settings.py b/fet2020/fet2020/settings.py index 493c24f0..b191f73a 100644 --- a/fet2020/fet2020/settings.py +++ b/fet2020/fet2020/settings.py @@ -116,6 +116,7 @@ DATABASES = { AUTHENTICATION_BACKENDS = [ 'django.contrib.auth.backends.RemoteUserBackend', + 'django.contrib.auth.backends.ModelBackend', ] # Password validation From 37dff3b310418c7dd7ba71ca7ed1de978d93a086 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 27 Aug 2020 20:01:24 +0000 Subject: [PATCH 04/11] calendar is now only future events; posts include members and images --- fet2020/fet2020/views.py | 2 +- fet2020/members/views.py | 2 +- fet2020/posts/models.py | 2 +- fet2020/posts/views.py | 11 ++++++++++- fet2020/templates/home.html | 8 ++++---- fet2020/templates/members/partials/_member.html | 2 +- fet2020/templates/posts/partials/_date_box.html | 2 +- fet2020/templates/posts/show.html | 4 ++-- 8 files changed, 21 insertions(+), 12 deletions(-) diff --git a/fet2020/fet2020/views.py b/fet2020/fet2020/views.py index 4e020e00..cae104b9 100644 --- a/fet2020/fet2020/views.py +++ b/fet2020/fet2020/views.py @@ -20,7 +20,7 @@ def index(request): context = { 'posts': posts, - 'events': Event.objects.order_by("-event_start").all(), + 'events': Event.objects.get_all_events(), 'featured_post': featured_post, 'featured_post2': FetMeeting.objects.first(), 'tags_list': ", ".join(t) diff --git a/fet2020/members/views.py b/fet2020/members/views.py index 746d6b22..0358a367 100644 --- a/fet2020/members/views.py +++ b/fet2020/members/views.py @@ -70,7 +70,7 @@ def profile_view(request, member_name=None): job_group = deque(JobGroup.objects.all()) member = None - member = deque(Member.all_members.filter(mailaccount=member_name)) + member = deque(Member.all_members.filter(nickname=member_name)) context = { "job_group": job_group, diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py index c818d27f..87014f8b 100644 --- a/fet2020/posts/models.py +++ b/fet2020/posts/models.py @@ -61,7 +61,7 @@ class EventManager(models.Manager): return super().get_queryset().filter( Q(is_event=True) & Q(event_start__gt=date_today) - ).order_by('-public_date') + ).order_by('-event_start') class FetMeetingManager(models.Manager): diff --git a/fet2020/posts/views.py b/fet2020/posts/views.py index f0124de8..bcb70255 100644 --- a/fet2020/posts/views.py +++ b/fet2020/posts/views.py @@ -41,11 +41,20 @@ def show(request, id=None): elif id != "" and id is not None: p = Post.objects.get(slug=(id)) + from members.models import Member + from easy_thumbnails.files import get_thumbnailer + + + #post_author = p.author + post_author = Member.all_members.filter(nickname=p.author) + post_author_thumb_url = get_thumbnailer(post_author[0].image)['thumb'].url + context = { "post": p, "next": get_next_dict().get(p.slug, None), "related_posts": p.tags.similar_objects(), - "ep_link": get_pad_link(p.slug + "-agenda") + "ep_link": get_pad_link(p.slug + "-agenda"), + "author_image": post_author_thumb_url } response = render(request, 'posts/show.html', context) response.set_cookie("HelloWorld", "TestWert", domain="https://etherpad2.2020.fet.at") diff --git a/fet2020/templates/home.html b/fet2020/templates/home.html index 049e80cf..062fa43b 100644 --- a/fet2020/templates/home.html +++ b/fet2020/templates/home.html @@ -1,4 +1,4 @@ -{% extends 'layout.html' %} +func{% extends 'layout.html' %} {% load post_helpers %} {% load static %} {% block content %} @@ -13,7 +13,7 @@

{{post.title| safe}}

@@ -55,8 +55,8 @@ {% endfor %}
- {% for post in events %} - {% include 'posts/partials/_date_box.html' %} + {% for post in events %} + {% include 'posts/partials/_date_box.html' %} {% endfor %}
diff --git a/fet2020/templates/members/partials/_member.html b/fet2020/templates/members/partials/_member.html index 428e9a97..5c70a9a6 100644 --- a/fet2020/templates/members/partials/_member.html +++ b/fet2020/templates/members/partials/_member.html @@ -2,7 +2,7 @@ {# only thumb and name of member #} {% load thumbnail %} - + {% if member.image %} {% endif %} diff --git a/fet2020/templates/posts/partials/_date_box.html b/fet2020/templates/posts/partials/_date_box.html index a57b8307..63b0adab 100644 --- a/fet2020/templates/posts/partials/_date_box.html +++ b/fet2020/templates/posts/partials/_date_box.html @@ -1,4 +1,4 @@ - +
diff --git a/fet2020/templates/posts/show.html b/fet2020/templates/posts/show.html index 9d06e77c..b89480eb 100644 --- a/fet2020/templates/posts/show.html +++ b/fet2020/templates/posts/show.html @@ -16,8 +16,8 @@
{{post.subtitle | tags_to_url }}
From 764bee63f658d18e4525576e380dd430188a5c83 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 27 Aug 2020 22:43:04 +0000 Subject: [PATCH 05/11] change image of member from ImageField to ThumbnailerImageField --- fet2020/fet2020/middleware.py | 6 +++--- fet2020/members/models.py | 3 ++- fet2020/posts/views.py | 10 +++------- fet2020/templates/home.html | 2 +- fet2020/templates/members/partials/_member.html | 4 +--- fet2020/templates/posts/show.html | 2 +- 6 files changed, 11 insertions(+), 16 deletions(-) diff --git a/fet2020/fet2020/middleware.py b/fet2020/fet2020/middleware.py index dcffa50a..4a638721 100644 --- a/fet2020/fet2020/middleware.py +++ b/fet2020/fet2020/middleware.py @@ -1,7 +1,7 @@ # from django.contrib.auth.models import User from django.contrib.auth.middleware import RemoteUserMiddleware # import django -import logging +# import logging # logger=logging.getLogger("django.request") @@ -13,9 +13,9 @@ class FETHeaderMiddleware(RemoteUserMiddleware): self.header, request.headers.get(self.header, None) ) - logger = logging.getLogger(__name__) + # logger = logging.getLogger(__name__) super().process_request(request) - #logger.info('User: ' + str(request.user)) + # logger.info('User: ' + str(request.user)) if request.user.is_authenticated: request.user.is_admin = True request.user.is_superuser = True diff --git a/fet2020/members/models.py b/fet2020/members/models.py index 5ba8ea43..1f7f7118 100644 --- a/fet2020/members/models.py +++ b/fet2020/members/models.py @@ -6,6 +6,7 @@ from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ from datetime import timedelta +from easy_thumbnails.fields import ThumbnailerImageField from rest_framework import serializers @@ -91,7 +92,7 @@ class Member(models.Model): role = models.CharField(max_length=1, choices=MemberRole.choices, default=MemberRole.ACTIVE) description = models.TextField(null=True, blank=True) - image = models.ImageField(null=True, blank=True) + image = ThumbnailerImageField() birthday = models.DateField(null=True, blank=True) diff --git a/fet2020/posts/views.py b/fet2020/posts/views.py index bcb70255..7428e581 100644 --- a/fet2020/posts/views.py +++ b/fet2020/posts/views.py @@ -10,6 +10,7 @@ from rest_framework import viewsets # from rest_framework import permissions from .models import Post, PostSerializer +from members.models import Member # from documents import add_ep_to_response from documents import get_ep_sessionid, get_pad_link @@ -41,21 +42,16 @@ def show(request, id=None): elif id != "" and id is not None: p = Post.objects.get(slug=(id)) - from members.models import Member - from easy_thumbnails.files import get_thumbnailer - - - #post_author = p.author post_author = Member.all_members.filter(nickname=p.author) - post_author_thumb_url = get_thumbnailer(post_author[0].image)['thumb'].url context = { "post": p, "next": get_next_dict().get(p.slug, None), "related_posts": p.tags.similar_objects(), "ep_link": get_pad_link(p.slug + "-agenda"), - "author_image": post_author_thumb_url + "author_image": post_author[0].image['avatar'].url } + response = render(request, 'posts/show.html', context) response.set_cookie("HelloWorld", "TestWert", domain="https://etherpad2.2020.fet.at") ep_sessid, expires = get_ep_sessionid(request) diff --git a/fet2020/templates/home.html b/fet2020/templates/home.html index 062fa43b..2c1333b4 100644 --- a/fet2020/templates/home.html +++ b/fet2020/templates/home.html @@ -1,4 +1,4 @@ -func{% extends 'layout.html' %} +{% extends 'layout.html' %} {% load post_helpers %} {% load static %} {% block content %} diff --git a/fet2020/templates/members/partials/_member.html b/fet2020/templates/members/partials/_member.html index 5c70a9a6..b2ae4f58 100644 --- a/fet2020/templates/members/partials/_member.html +++ b/fet2020/templates/members/partials/_member.html @@ -3,8 +3,6 @@ {# only thumb and name of member #} {% load thumbnail %} -{% if member.image %} - -{% endif %} +

{{member.nickname}}

{{member.firstname}} {{member.surname}}

\ No newline at end of file diff --git a/fet2020/templates/posts/show.html b/fet2020/templates/posts/show.html index b89480eb..8aea14c4 100644 --- a/fet2020/templates/posts/show.html +++ b/fet2020/templates/posts/show.html @@ -16,7 +16,7 @@
{{post.subtitle | tags_to_url }} From 41a75f16f41741a5f1966722bc7b4af4e024cf00 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 27 Aug 2020 23:30:15 +0000 Subject: [PATCH 06/11] add a minimum size of image of members (150x150) --- fet2020/members/models.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/fet2020/members/models.py b/fet2020/members/models.py index 1f7f7118..810554d0 100644 --- a/fet2020/members/models.py +++ b/fet2020/members/models.py @@ -1,4 +1,4 @@ -from django.core.validators import RegexValidator +from django.core.validators import RegexValidator, ValidationError from django.db import models from django.db.models import Q from django.utils import timezone @@ -114,6 +114,15 @@ class Member(models.Model): verbose_name = "Mitglied" verbose_name_plural = "Mitglieder" + def clean(self): + if self.image.height < 150 or self.image.width < 150: + raise ValidationError( + _('Das Bild ist zu klein. (Höhe: {}, Breite: {})').format( + self.image.height, + self.image.width + ) + ) + def __str__(self): return self.firstname + " " + self.surname From 3c697e3e9374a871f9f6fce585ccc121dab8e56a Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 28 Aug 2020 00:25:29 +0000 Subject: [PATCH 07/11] add a check if a slug of Fachschaftssitzung exists already --- fet2020/posts/models.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py index 87014f8b..2b2a2dcf 100644 --- a/fet2020/posts/models.py +++ b/fet2020/posts/models.py @@ -1,4 +1,5 @@ from django.contrib.auth.models import User +from django.core.validators import ValidationError from django.db import models from django.db.models import Q from django.urls import reverse @@ -168,7 +169,8 @@ class Post(models.Model): # 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() + slug__in=self.tags.names() + ).filter(image__isnull=False)[0:1].all() if len(posts1) > 0: return posts1.get().image @@ -186,11 +188,12 @@ class Post(models.Model): "save the post with some defaults" 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) @@ -262,6 +265,12 @@ class FetMeeting(Event): verbose_name = "Fet Sitzung" verbose_name_plural = "Fet Sitzungen" + def clean(self): + slug = slugify(self.event_start.date()) + "-" + slugify("Fachschaftssitzung") + + if Post.objects.filter(slug=slug).count() != 0: + raise ValidationError(_('Es existiert bereits eine Sitzung mit demselben Datum.')) + def save(self, *args, **kwargs): self.title = "Fachschaftssitzung" self.slug = slugify(self.event_start.date()) + "-" + slugify(self.title) From 605feafa4838dcd769f37574d393372fe3146fcb Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 28 Aug 2020 01:30:12 +0000 Subject: [PATCH 08/11] add cancel button in the admin view --- fet2020/templates/admin/submit_line.html | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 fet2020/templates/admin/submit_line.html diff --git a/fet2020/templates/admin/submit_line.html b/fet2020/templates/admin/submit_line.html new file mode 100644 index 00000000..e4b91bb9 --- /dev/null +++ b/fet2020/templates/admin/submit_line.html @@ -0,0 +1,15 @@ +{% load i18n admin_urls %} +
+{% block submit-row %} +{% if show_save %}{% endif %} +{% if show_delete_link %} + {% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %} + +{% endif %} +{% trans 'Close' %} +{% if show_save_as_new %}{% endif %} +{% if show_save_and_add_another %}{% endif %} +{% if show_save_and_continue %}{% endif %} +{% if show_publish %}{% endif %} +{% endblock %} +
\ No newline at end of file From 2dbc08f3619bb47c4109b05d0fdafd196ae04c6e Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 28 Aug 2020 01:37:07 +0000 Subject: [PATCH 09/11] delete migrations folder --- fet2020/posts/migrations/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 fet2020/posts/migrations/__init__.py diff --git a/fet2020/posts/migrations/__init__.py b/fet2020/posts/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 From 02260e74704139520e1cd1da5dbe64ab84f44b99 Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 28 Aug 2020 18:27:27 +0000 Subject: [PATCH 10/11] update admin views --- fet2020/members/admin.py | 57 ++++++++++++++++++++++++ fet2020/members/models.py | 4 ++ fet2020/posts/admin.py | 14 ++++++ fet2020/templates/admin/change_form.html | 6 +++ fet2020/templates/admin/submit_line.html | 16 ++----- 5 files changed, 85 insertions(+), 12 deletions(-) create mode 100644 fet2020/templates/admin/change_form.html diff --git a/fet2020/members/admin.py b/fet2020/members/admin.py index 5042ca5d..5e3b3763 100644 --- a/fet2020/members/admin.py +++ b/fet2020/members/admin.py @@ -54,12 +54,41 @@ class JobInline(admin.TabularInline): class MyMemberAdmin(admin.ModelAdmin): form = MyMemberForm model = Member + fieldsets = ( + (None, { + 'fields': ( + ('firstname', 'surname',), + 'nickname', + 'mailaccount', + 'role', + 'description', + 'image', + 'birthday', + 'phone', + 'address', + ) + }), + ) list_display = ['nickname', 'firstname', 'surname', 'mailaccount', 'role'] inlines = (JobOverviewInline,) search_fields = ['firstname', 'surname', 'nickname', 'mailaccount'] list_filter = [MemberRoleFilter] + def add_view(self, request, form_url='', extra_context=None): + extra_context = extra_context or {} + extra_context['help_text'] = "Fette Schriften sind Pflichtfelder." + return super().add_view( + request, form_url, extra_context=extra_context, + ) + + def change_view(self, request, object_id, form_url='', extra_context=None): + extra_context = extra_context or {} + extra_context['help_text'] = "Fette Schriften sind Pflichtfelder." + return super().change_view( + request, object_id, form_url, extra_context=extra_context, + ) + def save_model(self, request, obj, form, change): obj.author = request.user super().save_model(request, obj, form, change) @@ -76,6 +105,20 @@ class MyJobAdmin(admin.ModelAdmin): search_fields = ['name'] + def add_view(self, request, form_url='', extra_context=None): + extra_context = extra_context or {} + extra_context['help_text'] = "Fette Schriften sind Pflichtfelder." + return super().add_view( + request, form_url, extra_context=extra_context, + ) + + def change_view(self, request, object_id, form_url='', extra_context=None): + extra_context = extra_context or {} + extra_context['help_text'] = "Fette Schriften sind Pflichfelder." + return super().change_view( + request, object_id, form_url, extra_context=extra_context, + ) + def save_model(self, request, obj, form, change): obj.author = request.user super().save_model(request, obj, form, change) @@ -92,6 +135,20 @@ class MyJobGroupAdmin(admin.ModelAdmin): search_fields = ['name'] + def add_view(self, request, form_url='', extra_context=None): + extra_context = extra_context or {} + extra_context['help_text'] = "Fette Schriften sind Pflichtfelder." + return super().add_view( + request, form_url, extra_context=extra_context, + ) + + def change_view(self, request, object_id, form_url='', extra_context=None): + extra_context = extra_context or {} + extra_context['help_text'] = "Fette Schriften sind Pflichfelder." + return super().change_view( + request, object_id, form_url, extra_context=extra_context, + ) + def save_model(self, request, obj, form, change): obj.author = request.user super().save_model(request, obj, form, change) diff --git a/fet2020/members/models.py b/fet2020/members/models.py index 810554d0..23bf4152 100644 --- a/fet2020/members/models.py +++ b/fet2020/members/models.py @@ -149,6 +149,10 @@ class JobGroup(models.Model): is_pinned = models.BooleanField(default=False) + class Meta: + verbose_name = "Tätigkeit-Gruppierung" + verbose_name_plural = "Tätigkeit-Gruppierungen" + def __str__(self): return self.name diff --git a/fet2020/posts/admin.py b/fet2020/posts/admin.py index 0d85e67f..64c86842 100644 --- a/fet2020/posts/admin.py +++ b/fet2020/posts/admin.py @@ -25,6 +25,20 @@ class MyPostAdmin(admin.ModelAdmin): list_filter = ['is_event'] list_display = ['title', 'subtitle', 'slug', 'public_date'] + def add_view(self, request, form_url='', extra_context=None): + extra_context = extra_context or {} + extra_context['help_text'] = "Fette Schriften sind Pflichtfelder." + return super().add_view( + request, form_url, extra_context=extra_context, + ) + + def change_view(self, request, object_id, form_url='', extra_context=None): + extra_context = extra_context or {} + extra_context['help_text'] = "Fette Schriften sind Pflichtfelder." + return super().change_view( + request, object_id, form_url, extra_context=extra_context, + ) + def save_model(self, request, obj, form, change): obj.author = request.user super().save_model(request, obj, form, change) diff --git a/fet2020/templates/admin/change_form.html b/fet2020/templates/admin/change_form.html new file mode 100644 index 00000000..6769f39c --- /dev/null +++ b/fet2020/templates/admin/change_form.html @@ -0,0 +1,6 @@ +{% extends "admin/change_form.html" %} +{% load i18n admin_urls %} + +{% block form_top %} +{% if help_text %}

{{ help_text }}

{% endif %} +{% endblock %} diff --git a/fet2020/templates/admin/submit_line.html b/fet2020/templates/admin/submit_line.html index e4b91bb9..b3fbb539 100644 --- a/fet2020/templates/admin/submit_line.html +++ b/fet2020/templates/admin/submit_line.html @@ -1,15 +1,7 @@ +{% extends "admin/submit_line.html" %} {% load i18n admin_urls %} -
+ {% block submit-row %} -{% if show_save %}{% endif %} -{% if show_delete_link %} - {% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %} - -{% endif %} -{% trans 'Close' %} -{% if show_save_as_new %}{% endif %} -{% if show_save_and_add_another %}{% endif %} -{% if show_save_and_continue %}{% endif %} -{% if show_publish %}{% endif %} + {% trans 'Close' %} + {{ block.super }} {% endblock %} -
\ No newline at end of file From 7fff88d1679058b52a4e2804534ea2dc76782873 Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 28 Aug 2020 20:02:55 +0000 Subject: [PATCH 11/11] update admin view of event --- fet2020/posts/models.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py index 2b2a2dcf..bf3d77d1 100644 --- a/fet2020/posts/models.py +++ b/fet2020/posts/models.py @@ -239,6 +239,9 @@ class Event(Post): class Meta: proxy = True + verbose_name = "Event" + verbose_name_plural = "Events" + @property def event_start_month(self): return self.event_start.strftime("%b") @@ -247,6 +250,12 @@ class Event(Post): def event_start_day(self): return self.event_start.strftime("%d") + def clean(self): + if self.event_end is None or self.event_start is None: + raise ValidationError(_('Das Datum des Events fehlt.')) + elif self.event_end < self.event_start: + raise ValidationError(_('Das Ende des Events liegt vor dem Beginn.')) + def save(self, *args, **kwargs): self.is_event = True @@ -266,6 +275,9 @@ class FetMeeting(Event): verbose_name_plural = "Fet Sitzungen" def clean(self): + if self.event_start is None: + raise ValidationError(_('Das Datum des Events fehlt.')) + slug = slugify(self.event_start.date()) + "-" + slugify("Fachschaftssitzung") if Post.objects.filter(slug=slug).count() != 0: