Added filters and search fields for members, jobs

Member are searchable by name, nickname, mailaccount
Jobs are searchable by name
Menbers can be filtered by Active,Pension,All
NOT WORKING YET: Inline Widget JobMember filter for inactive jobs
This commit is contained in:
2020-06-09 14:00:29 +02:00
parent 7c09d76035
commit e94d19602b
6 changed files with 58 additions and 7 deletions

View File

@@ -40,7 +40,7 @@ INSTALLED_APPS = [
'django.contrib.sessions', 'django.contrib.sessions',
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'taggit', 'taggit',
'ckeditor', 'ckeditor',
'ckeditor_uploader', 'ckeditor_uploader',
'rest_framework', 'rest_framework',
@@ -160,5 +160,5 @@ CKEDITOR_CONFIGS = {
}, },
], ],
} }
} }

View File

@@ -2,17 +2,66 @@ from django.contrib import admin
from .models import Member, Job, JobMember from .models import Member, Job, JobMember
from .forms import MyMemberForm, MyJobForm from .forms import MyMemberForm, MyJobForm
from django.utils.translation import gettext as _
class ActiveJobFilter(admin.SimpleListFilter):
title = _('Aktiv im Job')
parameter_name = 'is_active'
def lookups(self, request, model_admin):
return (
('yes', _('Yes')),
('no', _('No')),
)
def queryset(self, request, queryset):
if self.value() == 'yes':
return queryset.filter(job_end__isnull=True)
if self.value() == 'no':
return queryset
class MemberRoleFilter(admin.SimpleListFilter):
title = _('Rolle')
parameter_name = 'role'
def lookups(self, request, model_admin):
return (
('A', _('Aktiv')),
('P', _('Pension')),
)
def queryset(self, request, queryset):
if self.value() == 'A':
return queryset.filter(role='A')
if self.value() == 'P':
return queryset.filter(role='P')
class JobMemberInline(admin.TabularInline): class JobMemberInline(admin.TabularInline):
list_filter = [ActiveJobFilter]
model = JobMember model = JobMember
extra = 1 extra = 1
#def get_queryset(self, request):
# qs = super().get_queryset(request)
# return qs.filter(job_end__isnull=False)
class MyMemberAdmin(admin.ModelAdmin): class MyMemberAdmin(admin.ModelAdmin):
form = MyMemberForm form = MyMemberForm
model = Member model = Member
list_display = ['name', 'nickname', 'mailaccount', 'role', 'body', 'image'] list_display = ['name', 'nickname', 'mailaccount', 'role', 'body', 'image']
inlines = (JobMemberInline,) inlines = (JobMemberInline,)
search_fields = ['name','nickname','mailaccount']
list_filter = [MemberRoleFilter]
def save_model(self, request, obj, form, change): def save_model(self, request, obj, form, change):
obj.author = request.user obj.author = request.user
super().save_model(request, obj, form, change) super().save_model(request, obj, form, change)
@@ -25,8 +74,10 @@ class MyJobAdmin(admin.ModelAdmin):
list_display = ['name', 'body', 'image'] list_display = ['name', 'body', 'image']
inlines = (JobMemberInline,) inlines = (JobMemberInline,)
search_fields = ['name']
def save_model(self, request, obj, form, change): def save_model(self, request, obj, form, change):
obj.author = request.user obj.author = request.user
super().save_model(request, obj, form, change) super().save_model(request, obj, form, change)
admin.site.register(Job, MyJobAdmin) admin.site.register(Job, MyJobAdmin)

View File

@@ -16,4 +16,4 @@ class MyJobForm(forms.ModelForm):
model = Job model = Job
fields = ['name', 'body', 'image'] fields = ['name', 'body', 'image']
widgets = {'body': CKEditorUploadingWidget(config_name='default')} widgets = {'body': CKEditorUploadingWidget(config_name='default')}

View File

@@ -68,4 +68,4 @@ class JobMember(models.Model):
class Meta: class Meta:
unique_together = [['member', 'job']] unique_together = [['member', 'job']]
jobmember = models.Manager() jobmember = models.Manager()

View File

@@ -5,4 +5,4 @@ from . import views
urlpatterns = [ urlpatterns = [
path('', views.index, name='index'), path('', views.index, name='index'),
] ]

View File

@@ -15,4 +15,4 @@ def index(request):
"jobmember": jobmember "jobmember": jobmember
} }
return render(request, 'member/index.html', context) return render(request, 'member/index.html', context)