views.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. # coding=utf-8
  2. from utils.custom_modelviewset import CustomModelViewSet
  3. from rest_framework.decorators import action
  4. import json
  5. import traceback
  6. from .models import Poster
  7. from utils.permission import IsAdministratorUser
  8. from .serializer import PosterSerializer
  9. from apps.log.models import BizLog
  10. from .filters import PosterFilter
  11. from django.db import transaction
  12. from utils.exceptions import CustomError
  13. from utils import response_ok, response_error
  14. class PosterViewSet(CustomModelViewSet):
  15. permission_classes = [IsAdministratorUser, ]
  16. queryset = Poster.objects.filter()
  17. serializer_class = PosterSerializer
  18. def filter_queryset(self, queryset):
  19. queryset = queryset.filter(tenant=self.request.user.employee.tenant)
  20. f = PosterFilter(self.request.GET, queryset=queryset)
  21. return f.qs
  22. def create(self, request, *args, **kwargs):
  23. data = json.loads(request.POST.get('data'))
  24. banner_img = request.FILES.get('banner_img')
  25. try:
  26. with transaction.atomic():
  27. data['create_user'] = request.user
  28. tenant = request.user.employee.tenant
  29. posters = Poster.objects.filter(tenant=tenant, enable=True).count()
  30. if posters >= 2:
  31. raise CustomError(u'只能添加2个在用的轮播!')
  32. data['tenant'] = tenant
  33. poster = Poster.objects.create(**data)
  34. poster._add_img(banner_img,request.user)
  35. BizLog.objects.addnew(tenant, request.user, BizLog.INSERT, u'添加轮播信息', data)
  36. return response_ok()
  37. except CustomError as e:
  38. return response_error(e.get_error_msg())
  39. except Exception as e:
  40. return response_error(str(e))
  41. @action(methods=['post'], detail=True)
  42. def update_poster(self, request, pk):
  43. data = json.loads(request.POST.get('data'))
  44. # data = {'title': '644', 'content': '发斯蒂芬44', 'location': '1', 'enable': '1'}
  45. banner_img = request.FILES.get('banner_img')
  46. try:
  47. if data['enable']:
  48. tenant = request.user.employee.tenant
  49. posters = Poster.objects.filter(tenant=tenant, enable=True).exclude(id=pk).count()
  50. if posters >= 2:
  51. raise CustomError(u'只能添加2个在用的轮播!')
  52. with transaction.atomic():
  53. Poster.objects.filter(id=pk).update(**data)
  54. poster = self.get_object()
  55. if banner_img:
  56. poster.del_images()
  57. poster._add_img(banner_img,request.user)
  58. except CustomError as e:
  59. return response_error(e.get_error_msg())
  60. except Exception as e:
  61. return response_error(str(e))
  62. return response_ok()