Files
fet2020/fet2020/members/views.py

106 lines
3.1 KiB
Python

from django.http import Http404
from django.shortcuts import render
from collections import deque
from .models import Member, JobMember, JobGroup, MemberSerializer
from rest_framework import viewsets
from rest_framework import permissions
# from django_filters.rest_framework import DjangoFilterBackend
def __get_job_groups():
pinned_job_groups = JobGroup.all_jobgroups.get_pinned_active_jobgroups()
unpinned_job_groups = JobGroup.all_jobgroups.get_unpinned_active_jobgroups()
# show max 5 pinned jobgroups
if len(pinned_job_groups) > 5:
for idx, val in enumerate(pinned_job_groups[5:]):
unpinned_job_groups.append(val)
pinned_job_groups = pinned_job_groups[:5]
return pinned_job_groups, unpinned_job_groups
def index(request):
pinned_job_groups, unpinned_job_groups = __get_job_groups()
members = deque(Member.all_members.all())
context = {
"pinned_job_groups": pinned_job_groups,
"unpinned_job_groups": unpinned_job_groups,
"members": members,
}
return render(request, 'members/index.html', context)
def jobs_view(request, slug=None):
pinned_job_groups, unpinned_job_groups = __get_job_groups()
description = JobGroup.all_jobgroups.filter(slug=slug).values().first()['description']
job_members = JobMember.active_member.get_all_by_slug(slug=slug)
context = {
"pinned_job_groups": pinned_job_groups,
"unpinned_job_groups": unpinned_job_groups,
"description": description,
"job_members": job_members,
}
return render(request, 'members/index.html', context)
def members_view(request, filter=None):
pinned_job_groups, unpinned_job_groups = __get_job_groups()
if filter in Member.MemberRole:
members = deque(Member.all_members.filter(role=filter))
else:
raise Http404("no member role")
context = {
"pinned_job_groups": pinned_job_groups,
"unpinned_job_groups": unpinned_job_groups,
"members": members,
}
return render(request, 'members/index.html', context)
def profile_view(request, member_name=None):
pinned_job_groups, unpinned_job_groups = __get_job_groups()
member = Member.all_members.filter(nickname=member_name).first()
if not member:
raise Http404("no member")
jobs = deque(JobMember.members.filter(member__nickname=member_name))
context = {
"pinned_job_groups": pinned_job_groups,
"unpinned_job_groups": unpinned_job_groups,
"member": member,
"jobs": jobs,
}
return render(request, 'members/index.html', context)
class MemberViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = Member.all_members.all().order_by('nickname')
serializer_class = MemberSerializer
permission_classes = [permissions.IsAuthenticated]
# filter_backends = [DjangoFilterBackend]
# filterset_fields = ['legacy_id', 'slug','legacy_rubrik_id']
lookup_field = 'name'
def pre_save(self, obj):
obj.image = self.request.FILES.get('image')