views.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. # coding=utf-8
  2. from django.db import transaction
  3. from rest_framework.views import APIView
  4. from utils.permission import IsAdministrator
  5. from utils import response_error, response_ok
  6. from utils.custom_modelviewset import CustomModelViewSet
  7. from apps.system.models import SysLog
  8. from apps.foundation.models import Subject, Chapter
  9. from apps.foundation.filters import SubjectFilter, ChapterFilter
  10. from apps.foundation.serializers import SubjectSerializer, ChapterSerializer, SubjectSimpleSerializer, ChapterSimpleSerializer
  11. from apps.examination.examquestion.models import ExamQuestion
  12. from apps.knowledge.models import KnowledgeBase
  13. from apps.examination.exampaper.models import ExamPaper
  14. from apps.examination.exam.models import Exam
  15. class SubjectViewSet(CustomModelViewSet):
  16. permission_classes = [IsAdministrator, ]
  17. queryset = Subject.objects.filter(delete=False)
  18. serializer_class = SubjectSerializer
  19. def filter_queryset(self, queryset):
  20. f = SubjectFilter(self.request.GET, queryset=queryset)
  21. return f.qs
  22. def perform_create(self, serializer):
  23. super(SubjectViewSet, self).perform_create(serializer)
  24. instance = serializer.instance
  25. validated_data = serializer.validated_data
  26. SysLog.objects.addnew(self.request.user, SysLog.INSERT, u'添加科目[%s],id=%d' % (instance.name, instance.id), validated_data)
  27. def perform_update(self, serializer):
  28. super(SubjectViewSet, self).perform_update(serializer)
  29. instance = serializer.instance
  30. validated_data = serializer.validated_data
  31. SysLog.objects.addnew(self.request.user, SysLog.UPDATE, u'修改科目[%s],id=%d' % (instance.name, instance.id), validated_data)
  32. def destroy(self, request, *args, **kwargs):
  33. with transaction.atomic():
  34. instance = self.get_object()
  35. instance.delete = True
  36. # 删除章节科目,删除对应的数据 20230215
  37. Chapter.objects.filter(subject=instance).update(delete=True)
  38. ExamPaper.objects.filter(subject=instance).update(delete=True)
  39. Exam.objects.filter(subject=instance).update(delete=True)
  40. ExamQuestion.objects.filter(chapter__subject=instance).update(delete=True)
  41. KnowledgeBase.objects.filter(chapter__subject=instance).update(delete=True)
  42. instance.save()
  43. SysLog.objects.addnew(self.request.user, SysLog.DELETE, u'删除科目[%s],id=%d' % (instance.name, instance.id))
  44. return response_ok()
  45. class ChapterViewSet(CustomModelViewSet):
  46. permission_classes = [IsAdministrator, ]
  47. queryset = Chapter.objects.filter(delete=False, subject__delete=False)
  48. serializer_class = ChapterSerializer
  49. def filter_queryset(self, queryset):
  50. f = ChapterFilter(self.request.GET, queryset=queryset)
  51. return f.qs
  52. def perform_create(self, serializer):
  53. super(ChapterViewSet, self).perform_create(serializer)
  54. instance = serializer.instance
  55. validated_data = serializer.validated_data
  56. SysLog.objects.addnew(self.request.user, SysLog.INSERT, u'添加章节[%s],id=%d' % (instance.name, instance.id), validated_data)
  57. def perform_update(self, serializer):
  58. super(ChapterViewSet, self).perform_update(serializer)
  59. instance = serializer.instance
  60. validated_data = serializer.validated_data
  61. SysLog.objects.addnew(self.request.user, SysLog.UPDATE, u'修改章节[%s],id=%d' % (instance.name, instance.id), validated_data)
  62. def destroy(self, request, *args, **kwargs):
  63. with transaction.atomic():
  64. instance = self.get_object()
  65. instance.delete = True
  66. ExamQuestion.objects.filter(chapter=instance).update(delete=True)
  67. KnowledgeBase.objects.filter(chapter=instance).update(delete=True)
  68. instance.save()
  69. SysLog.objects.addnew(self.request.user, SysLog.DELETE, u'删除章节[%s],id=%d' % (instance.name, instance.id))
  70. return response_ok()
  71. class DictView(APIView):
  72. permission_classes = [IsAdministrator, ]
  73. def get(self, request):
  74. ret = {
  75. 'subject': SubjectSimpleSerializer(Subject.objects.filter(delete=False), many=True).data,
  76. 'chapter': ChapterSimpleSerializer(Chapter.objects.filter(delete=False, subject__delete=False), many=True).data
  77. }
  78. return response_ok(ret)