fix: 修改个人考试记录接口和个人参与考试
This commit is contained in:
parent
fde4bdf0ea
commit
5274960945
|
@ -1,7 +1,9 @@
|
|||
from django_filters import rest_framework as filters
|
||||
from django.utils import timezone
|
||||
from .models import ExamRecord, Exam
|
||||
from django.db.models import Q
|
||||
class ExamRecordFilter(filters.FilterSet):
|
||||
is_my = filters.BooleanFilter(method='filter_is_my')
|
||||
class Meta:
|
||||
model = ExamRecord
|
||||
fields = {
|
||||
|
@ -10,9 +12,15 @@ class ExamRecordFilter(filters.FilterSet):
|
|||
'type': ['exact'],
|
||||
'is_submited': ['exact'],
|
||||
}
|
||||
def filter_is_my(self, queryset, name, value):
|
||||
if value:
|
||||
user = self.request.user
|
||||
return queryset.filter(create_by=user)
|
||||
return queryset
|
||||
|
||||
class ExamFilter(filters.FilterSet):
|
||||
can_attend = filters.BooleanFilter(method='filter_can_attend')
|
||||
is_my = filters.BooleanFilter(method='filter_is_my')
|
||||
class Meta:
|
||||
model = Exam
|
||||
fields = {
|
||||
|
@ -26,4 +34,11 @@ class ExamFilter(filters.FilterSet):
|
|||
if value:
|
||||
now = timezone.now()
|
||||
return queryset.filter(open_time__lte=now, close_time__gte=now)| queryset.filter(close_time__isnull=True)
|
||||
return queryset
|
||||
return queryset
|
||||
|
||||
def filter_is_my(self, queryset, name, value):
|
||||
if value:
|
||||
user = self.request.user
|
||||
return queryset.filter(Q(participant_user=user)|Q(participant_dep=user.dept)|Q(is_open=True))
|
||||
return queryset
|
||||
|
|
@ -413,7 +413,7 @@ class PaperViewSet(ModelViewSet):
|
|||
|
||||
|
||||
class ExamViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
||||
perms_map = {'get': 'exam', 'post':'exam', 'put':'exam', 'delete':'exam'}
|
||||
perms_map = {'get': '*', 'post':'exam', 'put':'exam', 'delete':'exam'}
|
||||
queryset = Exam.objects.all().select_related('paper', 'create_by')
|
||||
ordering = ['-id']
|
||||
search_fields = ('name',)
|
||||
|
@ -427,23 +427,13 @@ class ExamViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
|||
return ExamDetailSerializer
|
||||
return super().get_serializer_class()
|
||||
|
||||
@action(methods=['get'], detail=False, permission_classes=[IsAuthenticated])
|
||||
def self(self, request, pk=None):
|
||||
'''
|
||||
跟我有关的考试
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset()
|
||||
user = self.request.user
|
||||
if has_permission("exam", user):
|
||||
return qs
|
||||
return qs.filter(Q(participant_user=user)|Q(participant_dep=user.dept)|Q(is_open=True))
|
||||
|
||||
跟我有关的考试
|
||||
'''
|
||||
queryset = self.get_queryset().filter(Q(participant_user=request.user)|Q(participant_dep=request.user.dept))
|
||||
queryset = self.filter_queryset(queryset)
|
||||
|
||||
page = self.paginate_queryset(queryset)
|
||||
if page is not None:
|
||||
serializer = self.get_serializer(page, many=True)
|
||||
return self.get_paginated_response(serializer.data)
|
||||
|
||||
serializer = self.get_serializer(queryset, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
def destroy(self, request, *args, **kwargs):
|
||||
instance = self.get_object()
|
||||
|
@ -549,23 +539,6 @@ class ExamRecordViewSet(ListModelMixin, DestroyModelMixin, RetrieveModelMixin, G
|
|||
ExamRecord.objects.filter(create_time__lte=days7_ago, is_submited=False).delete(soft=False)
|
||||
return Response(status=False)
|
||||
|
||||
@action(methods=['get'], detail=False, permission_classes=[IsAuthenticated])
|
||||
def self(self, request, pk=None):
|
||||
'''
|
||||
个人考试记录
|
||||
|
||||
个人考试记录
|
||||
'''
|
||||
queryset = ExamRecord.objects.filter(create_by=request.user).order_by('-update_time')
|
||||
queryset = self.filter_queryset(queryset)
|
||||
|
||||
page = self.paginate_queryset(queryset)
|
||||
if page is not None:
|
||||
serializer = self.get_serializer(page, many=True)
|
||||
return self.get_paginated_response(serializer.data)
|
||||
|
||||
serializer = self.get_serializer(queryset, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
@action(methods=['post'], detail=True, perms_map=[{'post': '*'}], serializer_class=ExamRecordSubmitSerializer, permission_classes = [IsAuthenticated])
|
||||
@transaction.atomic
|
||||
|
|
Loading…
Reference in New Issue