From 98c3e417b345ef47f5eab0188a10638834368d8c Mon Sep 17 00:00:00 2001 From: Patrick Mayr Date: Sat, 30 Jul 2022 23:36:40 +0000 Subject: [PATCH] sorting admin fields and set shortterm to unique --- fet2020/members/admin.py | 86 +++++++++++++++++++++++++++------------ fet2020/members/forms.py | 55 +++++++++---------------- fet2020/members/models.py | 22 +++++----- 3 files changed, 88 insertions(+), 75 deletions(-) diff --git a/fet2020/members/admin.py b/fet2020/members/admin.py index ec6a4b32..fb3a710b 100644 --- a/fet2020/members/admin.py +++ b/fet2020/members/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin from django.utils.translation import gettext as _ -from .forms import JobForm, JobGroupForm, MemberForm +from .forms import JobForm, JobGroupForm, JobInlineForm, MemberForm from .models import Job, JobGroup, JobMember, Member @@ -47,13 +47,16 @@ class InactiveMemberInline(JobMemberInline): class JobInline(admin.TabularInline): + form = JobInlineForm model = Job extra = 0 + show_change_link = True class MemberAdmin(admin.ModelAdmin): form = MemberForm model = Member + fieldsets = ( ( None, @@ -79,11 +82,9 @@ class MemberAdmin(admin.ModelAdmin): inlines = (JobOverviewInline,) list_display = ["nickname", "firstname", "surname", "mailaccount", "role"] - ordering = [ - "firstname", - ] - search_fields = ["firstname", "surname", "nickname", "mailaccount"] list_filter = [MemberRoleFilter] + ordering = ["firstname"] + search_fields = ["firstname", "surname", "nickname", "mailaccount"] def add_view(self, request, form_url="", extra_context=None): extra_context = extra_context or {} @@ -112,18 +113,33 @@ class MemberAdmin(admin.ModelAdmin): class JobAdmin(admin.ModelAdmin): form = JobForm model = Job - inlines = (ActiveMemberInline, InactiveMemberInline) - list_display = [ - "name", - "job_group", - ] - ordering = [ - "name", - ] - search_fields = [ - "name", - ] + list_display = ["name", "job_group"] + ordering = ["name"] + search_fields = ["name"] + + fieldsets = ( + ( + None, + { + "fields": ( + "name", + "job_group", + ) + }, + ), + ( + "Permalink", + { + "fields": ( + "shortterm", + "slug", + ) + } + ), + ) + inlines = (ActiveMemberInline, InactiveMemberInline) + readonly_fields = ["slug"] def add_view(self, request, form_url="", extra_context=None): extra_context = extra_context or {} @@ -152,18 +168,34 @@ class JobAdmin(admin.ModelAdmin): class JobGroupAdmin(admin.ModelAdmin): form = JobGroupForm model = JobGroup - inlines = (JobInline,) - list_display = [ - "name", - "is_pinned", - ] - ordering = [ - "name", - ] - search_fields = [ - "name", - ] + list_display = ["name", "is_pinned"] + ordering = ["name"] + search_fields = ["name"] + + fieldsets = ( + ( + None, + { + "fields": ( + "name", + "description", + "is_pinned", + ) + }, + ), + ( + "Permalink", + { + "fields": ( + "shortterm", + "slug", + ) + } + ), + ) + inlines = (JobInline,) + readonly_fields = ["slug"] def add_view(self, request, form_url="", extra_context=None): extra_context = extra_context or {} diff --git a/fet2020/members/forms.py b/fet2020/members/forms.py index c63d9fc9..eff839fb 100644 --- a/fet2020/members/forms.py +++ b/fet2020/members/forms.py @@ -6,24 +6,24 @@ from django.utils.translation import gettext_lazy as _ from .models import Member, Job, JobGroup +class JobInlineForm(forms.ModelForm): + class Meta: + model = Job + fields = ["name"] + + class MemberForm(forms.ModelForm): class Meta: + fields = "__all__" model = Member - fields = [ - "firstname", - "surname", - "nickname", - "username", - "mailaccount", - "role", - "description", - "image", - "birthday", - "phone", - "address", - ] - widgets = {"description": CKEditorUploadingWidget(config_name="default")} + help_texts = { + "image": _( + "Mindestdimension: 150*150 px, maximale Größe: 10MB, " + "erlaubtes Format: Bildformate." + ), + "mailaccount": _("Die Mailadresse mit '@fet.at' angeben."), + } labels = { "description": _("Beschreibung zu der Person"), @@ -33,24 +33,13 @@ class MemberForm(forms.ModelForm): "address": _("Wohnadresse"), } - help_texts = { - "image": _( - "Mindestdimension: 150*150 px, maximale Größe: 10MB, " - "erlaubtes Format: Bildformat" - ), - "mailaccount": _("Die Mailadresse mit '@fet.at' angeben."), - } + widgets = {"description": CKEditorUploadingWidget(config_name="default")} class JobForm(forms.ModelForm): class Meta: + fields = "__all__" model = Job - fields = [ - "name", - "shortterm", - "slug", - "job_group", - ] labels = { "shortterm": _("Kürzel der Tätigkeit"), @@ -61,16 +50,8 @@ class JobForm(forms.ModelForm): class JobGroupForm(forms.ModelForm): class Meta: + fields = "__all__" model = JobGroup - fields = [ - "name", - "shortterm", - "slug", - "description", - "is_pinned", - ] - - widgets = {"description": CKEditorUploadingWidget(config_name="default")} labels = { "shortterm": _("Kürzel des Tätigkeitsbereichs"), @@ -81,3 +62,5 @@ class JobGroupForm(forms.ModelForm): "damit es sofort ersichtlich ist." ), } + + widgets = {"description": CKEditorUploadingWidget(config_name="default")} diff --git a/fet2020/members/models.py b/fet2020/members/models.py index 12ca5575..54012741 100644 --- a/fet2020/members/models.py +++ b/fet2020/members/models.py @@ -111,7 +111,7 @@ class Member(models.Model): class JobGroup(models.Model): name = models.CharField(max_length=128) - shortterm = models.CharField(max_length=128) + shortterm = models.CharField(max_length=128, unique=True, blank=True) slug = models.SlugField(unique=True, null=True, blank=True) description = models.TextField(null=True, blank=True) @@ -133,17 +133,16 @@ class JobGroup(models.Model): def get_absolute_url(self): return reverse("jobs", kwargs={"slug": self.slug}) - def save(self, *args, **kwargs): - if not self.slug: - self.slug = slugify(self.shortterm) - - super().save(*args, **kwargs) + def clean(self): + if not self.shortterm: + self.shortterm = slugify(self.name) + self.slug = slugify(self.shortterm) class Job(models.Model): name = models.CharField(max_length=128) - shortterm = models.CharField(max_length=128) + shortterm = models.CharField(max_length=128, unique=True, blank=True) slug = models.SlugField(unique=True, null=True, blank=True) job_group = models.ForeignKey( @@ -165,11 +164,10 @@ class Job(models.Model): def get_absolute_url(self): return reverse("jobs", kwargs={"slug": self.job_group.slug}) + "#" + self.slug - def save(self, *args, **kwargs): - if not self.slug: - self.slug = slugify(self.shortterm) - - super().save(*args, **kwargs) + def clean(self): + if not self.shortterm: + self.shortterm = slugify(self.name) + self.slug = slugify(self.shortterm) class JobMember(models.Model):