add JobGroup
- you can sort the jobs into groups. - template/view: just experimental. It gives an overview of the job groups.
This commit is contained in:
@@ -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)
|
||||
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)
|
||||
@@ -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')}
|
||||
widgets = {'description': CKEditorUploadingWidget(config_name='default')}
|
||||
|
||||
class MyJobGroupForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = JobGroup
|
||||
fields = ['name', 'shortterm', 'is_pinned']
|
||||
@@ -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')
|
||||
|
||||
@@ -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)
|
||||
|
||||
79
fet2020/templates/members/index.html
Normal file
79
fet2020/templates/members/index.html
Normal file
@@ -0,0 +1,79 @@
|
||||
{% extends 'layout.html' %}
|
||||
|
||||
{% block content %}
|
||||
<div class="grid-container">
|
||||
<div class="grid-x">
|
||||
<div class="medium-8 cell">
|
||||
<h1>Members</h1>
|
||||
{% for m in members %}
|
||||
<div class="member-hero-text">
|
||||
{% if m.image %}
|
||||
<img src={{m.image.url}} style="width:150px;"/> </br>
|
||||
{% else %}
|
||||
{% endif %}
|
||||
Name: {{m.firstname|safe}} {{m.surname}} </br>
|
||||
Spitzname: {{m.nickname|safe}} </br>
|
||||
Mailaccount: {{m.mailaccount|safe}} </br>
|
||||
Beschreibung: {{m.description|safe}} </br>
|
||||
Geburtstag: {{m.birthday}} </br>
|
||||
Telefonnummer: {{m.phone}} </br>
|
||||
Adresse: {{m.address}} </br>
|
||||
</div>
|
||||
</br>
|
||||
<h2>Jobs</h2>
|
||||
{% for jobm in jobmembers %}
|
||||
{% if m == jobm.member %}
|
||||
Job: {{ jobm.job.shortterm }} </br>
|
||||
Job Start: {{ jobm.job_start }} </br>
|
||||
Job Ende: {{ jobm.job_end }} </br>
|
||||
{% else %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<hr/>
|
||||
{% endfor %}
|
||||
|
||||
<h1>Job Groups</h1>
|
||||
<h2>pinned JG</h2>
|
||||
{% for jg in jobgroups %}
|
||||
{% if jg.is_pinned %}
|
||||
JobGroup: {{ jg.name }} </br>
|
||||
{% for job in jobs %}
|
||||
{% if job.job_group.name == jg.name %}
|
||||
Job: {{ job.name }} </br>
|
||||
{% for jobm in jobmembers %}
|
||||
{% if job.name == jobm.job.name %}
|
||||
Member Name: {{ jobm.member.nickname }} </br>
|
||||
{% else %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<hr/>
|
||||
<h2>unpinned JG</h2>
|
||||
{% for jg in jobgroups %}
|
||||
{% if jg.is_pinned %}
|
||||
{% else %}
|
||||
JobGroup: {{ jg.name }} </br>
|
||||
{% for job in jobs %}
|
||||
{% if job.job_group.name == jg.name %}
|
||||
Job: {{ job.name }} </br>
|
||||
{% for jobm in jobmembers %}
|
||||
{% if job.name == jobm.job.name %}
|
||||
Member Name: {{ jobm.member.nickname }} </br>
|
||||
{% else %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user