sorting admin fields and set shortterm to unique

This commit is contained in:
2022-07-30 23:36:40 +00:00
parent d9ee560afa
commit 98c3e417b3
3 changed files with 88 additions and 75 deletions

View File

@@ -1,7 +1,7 @@
from django.contrib import admin from django.contrib import admin
from django.utils.translation import gettext as _ 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 from .models import Job, JobGroup, JobMember, Member
@@ -47,13 +47,16 @@ class InactiveMemberInline(JobMemberInline):
class JobInline(admin.TabularInline): class JobInline(admin.TabularInline):
form = JobInlineForm
model = Job model = Job
extra = 0 extra = 0
show_change_link = True
class MemberAdmin(admin.ModelAdmin): class MemberAdmin(admin.ModelAdmin):
form = MemberForm form = MemberForm
model = Member model = Member
fieldsets = ( fieldsets = (
( (
None, None,
@@ -79,11 +82,9 @@ class MemberAdmin(admin.ModelAdmin):
inlines = (JobOverviewInline,) inlines = (JobOverviewInline,)
list_display = ["nickname", "firstname", "surname", "mailaccount", "role"] list_display = ["nickname", "firstname", "surname", "mailaccount", "role"]
ordering = [
"firstname",
]
search_fields = ["firstname", "surname", "nickname", "mailaccount"]
list_filter = [MemberRoleFilter] list_filter = [MemberRoleFilter]
ordering = ["firstname"]
search_fields = ["firstname", "surname", "nickname", "mailaccount"]
def add_view(self, request, form_url="", extra_context=None): def add_view(self, request, form_url="", extra_context=None):
extra_context = extra_context or {} extra_context = extra_context or {}
@@ -112,18 +113,33 @@ class MemberAdmin(admin.ModelAdmin):
class JobAdmin(admin.ModelAdmin): class JobAdmin(admin.ModelAdmin):
form = JobForm form = JobForm
model = Job model = Job
inlines = (ActiveMemberInline, InactiveMemberInline)
list_display = [ list_display = ["name", "job_group"]
"name", ordering = ["name"]
"job_group", search_fields = ["name"]
]
ordering = [ fieldsets = (
"name", (
] None,
search_fields = [ {
"name", "fields": (
] "name",
"job_group",
)
},
),
(
"Permalink",
{
"fields": (
"shortterm",
"slug",
)
}
),
)
inlines = (ActiveMemberInline, InactiveMemberInline)
readonly_fields = ["slug"]
def add_view(self, request, form_url="", extra_context=None): def add_view(self, request, form_url="", extra_context=None):
extra_context = extra_context or {} extra_context = extra_context or {}
@@ -152,18 +168,34 @@ class JobAdmin(admin.ModelAdmin):
class JobGroupAdmin(admin.ModelAdmin): class JobGroupAdmin(admin.ModelAdmin):
form = JobGroupForm form = JobGroupForm
model = JobGroup model = JobGroup
inlines = (JobInline,)
list_display = [ list_display = ["name", "is_pinned"]
"name", ordering = ["name"]
"is_pinned", search_fields = ["name"]
]
ordering = [ fieldsets = (
"name", (
] None,
search_fields = [ {
"name", "fields": (
] "name",
"description",
"is_pinned",
)
},
),
(
"Permalink",
{
"fields": (
"shortterm",
"slug",
)
}
),
)
inlines = (JobInline,)
readonly_fields = ["slug"]
def add_view(self, request, form_url="", extra_context=None): def add_view(self, request, form_url="", extra_context=None):
extra_context = extra_context or {} extra_context = extra_context or {}

View File

@@ -6,24 +6,24 @@ from django.utils.translation import gettext_lazy as _
from .models import Member, Job, JobGroup from .models import Member, Job, JobGroup
class JobInlineForm(forms.ModelForm):
class Meta:
model = Job
fields = ["name"]
class MemberForm(forms.ModelForm): class MemberForm(forms.ModelForm):
class Meta: class Meta:
fields = "__all__"
model = Member 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 = { labels = {
"description": _("Beschreibung zu der Person"), "description": _("Beschreibung zu der Person"),
@@ -33,24 +33,13 @@ class MemberForm(forms.ModelForm):
"address": _("Wohnadresse"), "address": _("Wohnadresse"),
} }
help_texts = { widgets = {"description": CKEditorUploadingWidget(config_name="default")}
"image": _(
"Mindestdimension: 150*150 px, maximale Größe: 10MB, "
"erlaubtes Format: Bildformat"
),
"mailaccount": _("Die Mailadresse mit '@fet.at' angeben."),
}
class JobForm(forms.ModelForm): class JobForm(forms.ModelForm):
class Meta: class Meta:
fields = "__all__"
model = Job model = Job
fields = [
"name",
"shortterm",
"slug",
"job_group",
]
labels = { labels = {
"shortterm": _("Kürzel der Tätigkeit"), "shortterm": _("Kürzel der Tätigkeit"),
@@ -61,16 +50,8 @@ class JobForm(forms.ModelForm):
class JobGroupForm(forms.ModelForm): class JobGroupForm(forms.ModelForm):
class Meta: class Meta:
fields = "__all__"
model = JobGroup model = JobGroup
fields = [
"name",
"shortterm",
"slug",
"description",
"is_pinned",
]
widgets = {"description": CKEditorUploadingWidget(config_name="default")}
labels = { labels = {
"shortterm": _("Kürzel des Tätigkeitsbereichs"), "shortterm": _("Kürzel des Tätigkeitsbereichs"),
@@ -81,3 +62,5 @@ class JobGroupForm(forms.ModelForm):
"damit es sofort ersichtlich ist." "damit es sofort ersichtlich ist."
), ),
} }
widgets = {"description": CKEditorUploadingWidget(config_name="default")}

View File

@@ -111,7 +111,7 @@ class Member(models.Model):
class JobGroup(models.Model): class JobGroup(models.Model):
name = models.CharField(max_length=128) 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) slug = models.SlugField(unique=True, null=True, blank=True)
description = models.TextField(null=True, blank=True) description = models.TextField(null=True, blank=True)
@@ -133,17 +133,16 @@ class JobGroup(models.Model):
def get_absolute_url(self): def get_absolute_url(self):
return reverse("jobs", kwargs={"slug": self.slug}) return reverse("jobs", kwargs={"slug": self.slug})
def save(self, *args, **kwargs): def clean(self):
if not self.slug: if not self.shortterm:
self.slug = slugify(self.shortterm) self.shortterm = slugify(self.name)
self.slug = slugify(self.shortterm)
super().save(*args, **kwargs)
class Job(models.Model): class Job(models.Model):
name = models.CharField(max_length=128) 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) slug = models.SlugField(unique=True, null=True, blank=True)
job_group = models.ForeignKey( job_group = models.ForeignKey(
@@ -165,11 +164,10 @@ class Job(models.Model):
def get_absolute_url(self): def get_absolute_url(self):
return reverse("jobs", kwargs={"slug": self.job_group.slug}) + "#" + self.slug return reverse("jobs", kwargs={"slug": self.job_group.slug}) + "#" + self.slug
def save(self, *args, **kwargs): def clean(self):
if not self.slug: if not self.shortterm:
self.slug = slugify(self.shortterm) self.shortterm = slugify(self.name)
self.slug = slugify(self.shortterm)
super().save(*args, **kwargs)
class JobMember(models.Model): class JobMember(models.Model):