增加coustommixin

This commit is contained in:
caoqianming 2022-11-11 16:42:53 +08:00
parent 238e6988f4
commit 086c701cfa
1 changed files with 12 additions and 6 deletions

View File

@ -1,5 +1,6 @@
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from rest_framework.viewsets import ModelViewSet, GenericViewSet
from rest_framework.mixins import ListModelMixin, DestroyModelMixin
from apps.exam.exports import export_question
from apps.exam.models import Question, Questioncat, PaperQuestion
from apps.exam.serializers import (QuestionSerializer, QuestioncatSerializer, PaperSerializer, ExamDetailSerializer, ExamRecordDetailSerializer, ExamListSerializer,
@ -17,6 +18,7 @@ from rest_framework.serializers import Serializer
from datetime import datetime
from apps.exam.filters import ExamRecordFilter, ExamFilter
from datetime import timedelta
from apps.system.mixins import CreateUpdateCustomMixin
# Create your views here.
@ -43,7 +45,7 @@ def dectry(p):
return dec_str
class QuestioncatViewSet(ModelViewSet):
class QuestioncatViewSet(CreateUpdateCustomMixin, ModelViewSet):
perms_map = {'get': '*', 'post':'question', 'put':'question', 'delete':'question'}
queryset = Questioncat.objects.all()
serializer_class = QuestioncatSerializer
@ -51,7 +53,7 @@ class QuestioncatViewSet(ModelViewSet):
search_fields = ['name']
class QuestionViewSet(ModelViewSet):
class QuestionViewSet(CreateUpdateCustomMixin, ModelViewSet):
perms_map = {'get': '*', 'post':'question', 'put':'question', 'delete':'question'}
queryset = Question.objects.all()
serializer_class = QuestionSerializer
@ -233,6 +235,7 @@ class PaperViewSet(ModelViewSet):
sr = PaperCreateUpdateSerializer(data=request.data)
sr.is_valid(raise_exception=True)
vdata = sr.validated_data
vdata['create_by'] = request.user
questions_ = vdata.pop('questions_')
paper = Paper.objects.create(**vdata)
q_list = []
@ -251,6 +254,7 @@ class PaperViewSet(ModelViewSet):
sr.is_valid(raise_exception=True)
vdata = sr.validated_data
questions_ = vdata.pop('questions_')
vdata['update_by'] = request.user
Paper.objects.filter(id=paper.id).update(**vdata)
q_list = []
for i in questions_:
@ -260,7 +264,7 @@ class PaperViewSet(ModelViewSet):
return Response()
class ExamViewSet(ModelViewSet):
class ExamViewSet(CreateUpdateCustomMixin, ModelViewSet):
perms_map = {'get': '*', 'post':'exam', 'put':'exam', 'delete':'exam'}
queryset = Exam.objects.all().select_related('paper', 'create_by')
ordering = ['-id']
@ -322,7 +326,7 @@ class ExamViewSet(ModelViewSet):
raise ParseError('暂不支持')
class ExamRecordViewSet(ModelViewSet):
class ExamRecordViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet):
"""
考试记录列表和详情
"""
@ -342,7 +346,7 @@ class ExamRecordViewSet(ModelViewSet):
def perform_destroy(self, instance): # 考试记录物理删除
instance.delete(soft=False)
@action(methods=['post'], detail=True, perms_map=[{'post': '*'}], serializer_class=Serializer, permission_classes = [IsAuthenticated])
@action(methods=['post'], detail=False, perms_map=[{'post': '*'}], serializer_class=Serializer, permission_classes = [IsAuthenticated])
def clear(self, request, pk=None):
"""
清除七日前未提交的考试记录
@ -357,6 +361,8 @@ class ExamRecordViewSet(ModelViewSet):
@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')