liu tao 3 ani în urmă
părinte
comite
57765765e0

+ 13 - 0
apps/api/admin/knowledge/urls.py

@@ -0,0 +1,13 @@
+# coding=utf-8
+
+from django.conf.urls import url, include
+from rest_framework.routers import SimpleRouter
+
+from .views import *
+
+urlpatterns = [
+]
+
+router = SimpleRouter()
+router.register(r'', KnowledgeBaseViewSet)
+urlpatterns += router.urls

+ 41 - 0
apps/api/admin/knowledge/views.py

@@ -0,0 +1,41 @@
+# coding=utf-8
+
+from django.db import transaction
+from utils.permission import IsAdministrator
+from utils import response_error, response_ok
+from utils.custom_modelviewset import CustomModelViewSet
+from apps.system.models import SysLog
+
+from apps.knowledge.models import KnowledgeBase
+from apps.knowledge.filters import KnowledgeBaseFilter
+from apps.knowledge.serializers import KnowledgeBaseSerializer
+
+
+class KnowledgeBaseViewSet(CustomModelViewSet):
+    permission_classes = [IsAdministrator, ]
+    queryset = KnowledgeBase.objects.filter(delete=False)
+    serializer_class = KnowledgeBaseSerializer
+
+    def filter_queryset(self, queryset):
+        f = KnowledgeBaseFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
+    def perform_create(self, serializer):
+        super(KnowledgeBaseViewSet, self).perform_create(serializer)
+        instance = serializer.instance
+        validated_data = serializer.validated_data
+        SysLog.objects.addnew(self.request.user, SysLog.INSERT, u'添加知识[%s],id=%d' % (instance.name, instance.id), validated_data)
+
+    def perform_update(self, serializer):
+        super(KnowledgeBaseViewSet, self).perform_update(serializer)
+        instance = serializer.instance
+        validated_data = serializer.validated_data
+        SysLog.objects.addnew(self.request.user, SysLog.UPDATE, u'修改知识[%s],id=%d' % (instance.name, instance.id), validated_data)
+
+    def destroy(self, request, *args, **kwargs):
+        with transaction.atomic():
+            instance = self.get_object()
+            instance.delete = True
+            instance.save()
+            SysLog.objects.addnew(self.request.user, SysLog.DELETE, u'删除知识[%s],id=%d' % (instance.name, instance.id))
+        return response_ok()

+ 1 - 0
apps/api/admin/urls.py

@@ -17,4 +17,5 @@ urlpatterns = [
     url(r'^examquestion/', include('apps.api.admin.examquestion.urls')),
     url(r'^exampaper/', include('apps.api.admin.exampaper.urls')),
     url(r'^exam/', include('apps.api.admin.exam.urls')),
+    url(r'^knowledge/', include('apps.api.admin.knowledge.urls')),
 ]

+ 13 - 0
apps/knowledge/filters.py

@@ -0,0 +1,13 @@
+# coding=utf-8
+import django_filters
+
+from .models import KnowledgeBase
+
+class KnowledgeBaseFilter(django_filters.FilterSet):
+    name = django_filters.CharFilter(field_name="name", lookup_expr="icontains")
+    subject = django_filters.CharFilter(field_name='chapter__subject_id')
+    chapter = django_filters.CharFilter(field_name='chapter_id')
+
+    class Meta:
+        model = KnowledgeBase
+        fields = "__all__"

+ 25 - 0
apps/knowledge/serializers.py

@@ -0,0 +1,25 @@
+# coding=utf-8
+
+from rest_framework import serializers
+from .models import KnowledgeBase
+from utils.exceptions import CustomError
+
+class KnowledgeBaseSerializer(serializers.ModelSerializer):
+    subject_name = serializers.CharField(source='chapter.subject.name', read_only=True)
+    chapter_name = serializers.CharField(source='chapter.name', read_only=True)
+    create_user_text = serializers.CharField(source='create_user.username', read_only=True)
+
+    class Meta:
+        model = KnowledgeBase
+        fields = "__all__"
+
+    def create(self, validated_data):
+        validated_data['create_user'] = self.context['request'].user
+        instance = super(KnowledgeBaseSerializer, self).create(validated_data)
+        return instance
+
+    def update(self, instance, validated_data):
+        if instance.delete:
+            raise CustomError(u'知识[%s]已经被删除,禁止操作' % instance.name)
+        instance = super(KnowledgeBaseSerializer, self).update(instance, validated_data)
+        return instance