You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

102 lines
3.2 KiB

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
# Erik Stein <code@classlibrary.net>, 2016
from django.contrib import admin
from django.contrib.contenttypes.admin import GenericTabularInline
from django.utils.translation import ugettext_lazy as _
# django-admin-steroids is optional
try:
from admin_steroids.options import ImproveRawIdFieldsFormTabularInline
except ImportError:
class ImproveRawIdFieldsFormTabularInline(admin.TabularInline):
pass
class PersonRoleAdmin(admin.ModelAdmin):
list_display = ['get_name', 'id_text', 'label_de', 'label_en']
list_editable = ['id_text', 'label_de', 'label_en']
search_fields = ['name_de', 'name_en']
def get_name(self, obj):
return obj.name_de or obj.name_en
get_name.short_description = _("Bezeichnung")
get_name.admin_order_field = 'name_de'
class PersonAdminBase(admin.ModelAdmin):
list_display = ['name', 'sort_name', 'slug']
list_display_links = ['name']
list_editable = ['sort_name', 'slug']
search_fields = ['name']
prepopulated_fields = {'slug': ('name',)}
class PersonAdmin(PersonAdminBase):
class GroupMembershipListFilter(admin.SimpleListFilter):
title = _("Gruppe")
parameter_name = 'group'
def lookups(self, request, model_admin):
return model_admin.model.objects.filter(is_group=True).values_list('slug', 'name')
def queryset(self, request, queryset):
if self.value():
return queryset.filter(groups__slug=self.value())
else:
return queryset
list_display = ('is_group', 'name', 'get_main_person', 'sort_name', 'slug')
list_display_links = ('name',)
list_editable = ('sort_name', 'slug')
list_filter = (
'is_group',
GroupMembershipListFilter,
'_is_main_person',
)
fieldsets = (
(None, {
'classes': ('wide',),
'fields': (
('name', 'sort_name'),
'slug',
'main_person',
)
}),
(_("Gruppe/Gruppenmitglieder"), {
'classes': ('wide', 'collapse'),
'fields': (
'is_group',
'members',
)
}),
)
prepopulated_fields = {'slug': ('name',)}
raw_id_fields = ['main_person']
filter_horizontal = ('members',)
def get_groups_display(self, obj):
return ",".join(obj.groups.values_list('name', flat=True))
get_groups_display.short_description = _("Gruppen")
def get_main_person(self, obj):
return getattr(obj.main_person, 'name', "")
get_main_person.short_description = _("Haupteintrag")
class GenericParticipationInline(ImproveRawIdFieldsFormTabularInline, GenericTabularInline):
model = 'GenericParticipationRel'
verbose_name = _("Teilnehmer/in")
verbose_name_plural = _("Teilnehmer/innen")
fields = ('role', 'person', 'label', 'order_index',)
raw_id_fields = ('person',)
related_search_fields = {
'person': ('name',),
}
extra = 0
# from .models import PersonRole, Person, GenericParticipationRel
# admin.site.register(PersonRole, PersonRoleAdmin)
# admin.site.register(Person, PersonAdmin)