diff --git a/fet2020/members/admin.py b/fet2020/members/admin.py index 1f6d2424..c417cf50 100644 --- a/fet2020/members/admin.py +++ b/fet2020/members/admin.py @@ -1,8 +1,8 @@ from django.contrib import admin from django.utils.translation import gettext as _ -from .models import Member, Job, JobMember -from .forms import MyMemberForm, MyJobForm +from .models import Member, Job, JobMember, JobGroup +from .forms import MyMemberForm, MyJobForm, MyJobGroupForm class MemberRoleFilter(admin.SimpleListFilter): @@ -25,7 +25,7 @@ class JobMemberInline(admin.TabularInline): model = JobMember extra = 0 -class JobInline(JobMemberInline): +class JobOverviewInline(JobMemberInline): verbose_name = "Tätigkeit" verbose_name_plural = "Tätigkeitsübersicht" @@ -43,11 +43,15 @@ class InactiveMemberInline(JobMemberInline): def get_queryset(self, request): return JobMember.inactive_member.all() +class JobInline(admin.TabularInline): + model = Job + extra = 0 + class MyMemberAdmin(admin.ModelAdmin): form = MyMemberForm model = Member list_display = ['nickname', 'firstname', 'surname', 'mailaccount', 'role'] - inlines = (JobInline,) + inlines = (JobOverviewInline,) search_fields = ['firstname', 'surname','nickname','mailaccount'] list_filter = [MemberRoleFilter] @@ -70,4 +74,18 @@ class MyJobAdmin(admin.ModelAdmin): obj.author = request.user super().save_model(request, obj, form, change) -admin.site.register(Job, MyJobAdmin) \ No newline at end of file +admin.site.register(Job, MyJobAdmin) + +class MyJobGroupAdmin(admin.ModelAdmin): + form = MyJobGroupForm + model = JobGroup + list_display = ['name'] + inlines = (JobInline, ) + + search_fields = ['name'] + + def save_model(self, request, obj, form, change): + obj.author = request.user + super().save_model(request, obj, form, change) + +admin.site.register(JobGroup, MyJobGroupAdmin) \ No newline at end of file diff --git a/fet2020/members/forms.py b/fet2020/members/forms.py index 55dea6e9..c097cc63 100644 --- a/fet2020/members/forms.py +++ b/fet2020/members/forms.py @@ -1,7 +1,7 @@ from django import forms from ckeditor_uploader.widgets import CKEditorUploadingWidget -from .models import Member, Job +from .models import Member, Job, JobGroup class MyMemberForm(forms.ModelForm): @@ -25,6 +25,11 @@ class MyMemberForm(forms.ModelForm): class MyJobForm(forms.ModelForm): class Meta: model = Job - fields = ['name', 'shortterm', 'slug', 'description', 'image'] + fields = ['name', 'shortterm', 'slug', 'job_group', 'description', 'image'] - widgets = {'description': CKEditorUploadingWidget(config_name='default')} \ No newline at end of file + widgets = {'description': CKEditorUploadingWidget(config_name='default')} + +class MyJobGroupForm(forms.ModelForm): + class Meta: + model = JobGroup + fields = ['name', 'shortterm', 'is_pinned'] \ No newline at end of file diff --git a/fet2020/members/models.py b/fet2020/members/models.py index 8be02bdf..ee1546db 100644 --- a/fet2020/members/models.py +++ b/fet2020/members/models.py @@ -78,12 +78,6 @@ class Member(models.Model): date_modified = models.DateTimeField(auto_now=True) date_created = models.DateTimeField(auto_now_add=True) - has_jobs = models.ManyToManyField( - 'Job', - through='JobMember', - through_fields=('member', 'job'), - ) - # Managers all_members = models.Manager() active_member = MemberManager() @@ -109,6 +103,14 @@ class MemberSerializer(serializers.HyperlinkedModelSerializer): 'image' ] +class JobGroup(models.Model): + name = models.CharField(max_length=128) + shortterm = models.CharField(max_length=128) + is_pinned = models.BooleanField(default=False) + + def __str__(self): + return self.name + class Job(models.Model): name = models.CharField(max_length=128) shortterm = models.CharField(max_length=128) @@ -118,10 +120,10 @@ class Job(models.Model): description = models.TextField(null=True, blank=True) image = models.ImageField(null=True, blank=True) - has_members = models.ManyToManyField( - 'Member', - through='JobMember', - through_fields=('job', 'member'), + job_group = models.ForeignKey( + JobGroup, + on_delete=models.CASCADE, + verbose_name="Job Gruppe", ) class Meta: @@ -141,12 +143,12 @@ class JobMember(models.Model): member = models.ForeignKey( Member, on_delete=models.CASCADE, - verbose_name = "Mitglied", + verbose_name="Mitglied", ) job = models.ForeignKey( Job, on_delete=models.CASCADE, - verbose_name = "Tätigkeit", + verbose_name="Tätigkeit", ) job_start = models.DateField('Job Start') diff --git a/fet2020/members/views.py b/fet2020/members/views.py index 5bdb00b3..73fb47a6 100644 --- a/fet2020/members/views.py +++ b/fet2020/members/views.py @@ -3,7 +3,7 @@ from django.http import HttpResponse from collections import deque -from .models import Member, JobMember, MemberSerializer +from .models import Member, Job, JobMember, JobGroup, MemberSerializer from rest_framework import viewsets from rest_framework import permissions @@ -12,12 +12,16 @@ from django_filters.rest_framework import DjangoFilterBackend def index(request): #members = deque(Member.all_members.all()) - members = deque(Member.all_members.prefetch_related('has_jobs')) + members = deque(Member.all_members.all()) jobmembers = deque(JobMember.jobmember.all()) + jobs = deque(Job.objects.all()) + jobgroups = deque(JobGroup.objects.all()) context = { "members": members, "jobmembers" : jobmembers, + "jobgroups" : jobgroups, + "jobs" : jobs, } return render(request, 'members/index.html', context) diff --git a/fet2020/templates/members/index.html b/fet2020/templates/members/index.html new file mode 100644 index 00000000..0f334e5b --- /dev/null +++ b/fet2020/templates/members/index.html @@ -0,0 +1,79 @@ +{% extends 'layout.html' %} + +{% block content %} +