views.py 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768
  1. from rest_framework import viewsets
  2. from .models import ListModel,DepartmentListModel,BoundTypeListModel,BoundBSListModel,BoundCodeTypeListModel,BoundStatusListModel,ProductListModel
  3. from . import serializers
  4. from utils.page import MyPageNumberPagination
  5. from rest_framework.filters import OrderingFilter
  6. from django_filters.rest_framework import DjangoFilterBackend
  7. from rest_framework.response import Response
  8. from .filter import Filter,DepartmentFilter,BoundTypeFilter,BoundBSFilter,BoundCodeTypeFilter,BoundStatusFilter,ProductFilter
  9. from rest_framework.exceptions import APIException
  10. class APIViewSet(viewsets.ModelViewSet):
  11. pagination_class = MyPageNumberPagination
  12. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  13. ordering_fields = ['id', "create_time", "update_time", ]
  14. filter_class = Filter
  15. def get_project(self):
  16. # 获取项目ID,如果不存在则返回None
  17. try:
  18. id = self.kwargs.get('pk')
  19. return id
  20. except:
  21. return None
  22. def get_queryset(self):
  23. # 根据请求用户过滤查询集
  24. id = self.get_project()
  25. if self.request.user:
  26. if id is None:
  27. return ListModel.objects.filter( is_delete=False)
  28. else:
  29. return ListModel.objects.filter( id=id, is_delete=False)
  30. else:
  31. return ListModel.objects.none()
  32. def get_serializer_class(self):
  33. # 根据操作类型选择合适的序列化器
  34. if self.action in ['list', 'retrieve', 'destroy']:
  35. return serializers.WarehouseGetSerializer
  36. elif self.action in ['create']:
  37. return serializers.WarehousePostSerializer
  38. elif self.action in ['update']:
  39. return serializers.WarehouseUpdateSerializer
  40. elif self.action in ['partial_update']:
  41. return serializers.WarehousePartialUpdateSerializer
  42. else:
  43. return self.http_method_not_allowed(request=self.request)
  44. def create(self, request, *args, **kwargs):
  45. # 创建一个数据行
  46. data = self.request.data
  47. data['openid'] = self.request.auth.openid
  48. if len(data['warehouse_name']) > 45:
  49. raise APIException({"detail": "The warehouse name is set to more than 45 characters"})
  50. if ListModel.objects.filter( warehouse_name=data['warehouse_name'],
  51. is_delete=False).exists():
  52. raise APIException({"detail": "Data Exists"})
  53. else:
  54. # if ListModel.objects.filter(openid=data['openid'], is_delete=False).count() >= 1:
  55. # raise APIException({"detail": "You Just Can Add 1 Warehouse"})
  56. # else:
  57. serializer = self.get_serializer(data=data)
  58. serializer.is_valid(raise_exception=True)
  59. serializer.save()
  60. headers = self.get_success_headers(serializer.data)
  61. return Response(serializer.data, status=200, headers=headers)
  62. def update(self, request, pk):
  63. # 更新一个数据行
  64. qs = self.get_object()
  65. if qs.openid != self.request.auth.openid:
  66. raise APIException({"detail": "Cannot update data which not yours"})
  67. else:
  68. data = self.request.data
  69. if len(data['warehouse_name']) > 45:
  70. raise APIException({"detail": "The warehouse name is set to more than 45 characters"})
  71. serializer = self.get_serializer(qs, data=data)
  72. serializer.is_valid(raise_exception=True)
  73. serializer.save()
  74. headers = self.get_success_headers(serializer.data)
  75. return Response(serializer.data, status=200, headers=headers)
  76. def partial_update(self, request, pk):
  77. # 部分更新一个数据行
  78. qs = self.get_object()
  79. if qs.openid != self.request.auth.openid:
  80. raise APIException({"detail": "Cannot partial_update data which not yours"})
  81. else:
  82. data = self.request.data
  83. if len(data['warehouse_name']) > 45:
  84. raise APIException({"detail": "The warehouse name is set to more than 45 characters"})
  85. serializer = self.get_serializer(qs, data=data, partial=True)
  86. serializer.is_valid(raise_exception=True)
  87. serializer.save()
  88. headers = self.get_success_headers(serializer.data)
  89. return Response(serializer.data, status=200, headers=headers)
  90. def destroy(self, request, pk):
  91. # 逻辑删除一个数据行
  92. qs = self.get_object()
  93. if qs.openid != self.request.auth.openid:
  94. raise APIException({"detail": "Cannot delete data which not yours"})
  95. else:
  96. qs.is_delete = True
  97. qs.save()
  98. serializer = self.get_serializer(qs, many=False)
  99. headers = self.get_success_headers(serializer.data)
  100. return Response(serializer.data, status=200, headers=headers)
  101. class DepartmentAPIViewSet(viewsets.ModelViewSet):
  102. pagination_class = MyPageNumberPagination
  103. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  104. ordering_fields = ['id', "create_time", "update_time", ]
  105. filter_class = DepartmentFilter
  106. def get_project(self):
  107. # 获取项目ID,如果不存在则返回None
  108. try:
  109. id = self.kwargs.get('pk')
  110. return id
  111. except:
  112. return None
  113. def get_queryset(self):
  114. # 根据请求用户过滤查询集
  115. id = self.get_project()
  116. if self.request.user:
  117. if id is None:
  118. return DepartmentListModel.objects.filter( is_delete=False)
  119. else:
  120. return DepartmentListModel.objects.filter( id=id, is_delete=False)
  121. else:
  122. return DepartmentListModel.objects.none()
  123. def get_serializer_class(self):
  124. # 根据操作类型选择合适的序列化器
  125. if self.action in ['list', 'retrieve', 'destroy']:
  126. return serializers.DepartmentGetSerializer
  127. elif self.action in ['create']:
  128. return serializers.DepartmentPostSerializer
  129. elif self.action in ['update']:
  130. return serializers.DepartmentUpdateSerializer
  131. elif self.action in ['partial_update']:
  132. return serializers.DepartmentPartialUpdateSerializer
  133. else:
  134. return self.http_method_not_allowed(request=self.request)
  135. def create(self, request, *args, **kwargs):
  136. # 创建一个数据行
  137. data = self.request.data
  138. data['openid'] = self.request.auth.openid
  139. if len(data['department_name']) > 45:
  140. raise APIException({"detail": "The department name is set to more than 45 characters"})
  141. if DepartmentListModel.objects.filter(department_name=data['department_name'],
  142. is_delete=False).exists():
  143. raise APIException({"detail": "Data Exists"})
  144. else:
  145. serializer = self.get_serializer(data=data)
  146. serializer.is_valid(raise_exception=True)
  147. serializer.save()
  148. headers = self.get_success_headers(serializer.data)
  149. return Response(serializer.data, status=200, headers=headers)
  150. def update(self, request, pk):
  151. # 更新一个数据行
  152. qs = self.get_object()
  153. if qs.openid != self.request.auth.openid:
  154. raise APIException({"detail": "Cannot update data which not yours"})
  155. else:
  156. data = self.request.data
  157. if len(data['department_name']) > 45:
  158. raise APIException({"detail": "The department name is set to more than 45 characters"})
  159. serializer = self.get_serializer(qs, data=data)
  160. serializer.is_valid(raise_exception=True)
  161. serializer.save()
  162. headers = self.get_success_headers(serializer.data)
  163. return Response(serializer.data, status=200, headers=headers)
  164. def partial_update(self, request, pk):
  165. # 部分更新一个数据行
  166. qs = self.get_object()
  167. if qs.openid != self.request.auth.openid:
  168. raise APIException({"detail": "Cannot partial_update data which not yours"})
  169. else:
  170. data = self.request.data
  171. if len(data['department_name']) > 45:
  172. raise APIException({"detail": "The department name is set to more than 45 characters"})
  173. serializer = self.get_serializer(qs, data=data, partial=True)
  174. serializer.is_valid(raise_exception=True)
  175. serializer.save()
  176. headers = self.get_success_headers(serializer.data)
  177. return Response(serializer.data, status=200, headers=headers)
  178. def destroy(self, request, pk):
  179. # 逻辑删除一个数据行
  180. qs = self.get_object()
  181. if qs.openid != self.request.auth.openid:
  182. raise APIException({"detail": "Cannot delete data which not yours"})
  183. else:
  184. qs.is_delete = True
  185. qs.save()
  186. serializer = self.get_serializer(qs, many=False)
  187. headers = self.get_success_headers(serializer.data)
  188. return Response(serializer.data, status=200, headers=headers)
  189. class BoundTypeAPIViewSet(viewsets.ModelViewSet):
  190. pagination_class = MyPageNumberPagination
  191. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  192. ordering_fields = ['id', "create_time", "update_time", ]
  193. filter_class = BoundTypeFilter
  194. def get_project(self):
  195. # 获取项目ID,如果不存在则返回None
  196. try:
  197. id = self.kwargs.get('pk')
  198. return id
  199. except:
  200. return None
  201. def get_queryset(self):
  202. # 根据请求用户过滤查询集
  203. id = self.get_project()
  204. if self.request.user:
  205. if id is None:
  206. return BoundTypeListModel.objects.filter( is_delete=False)
  207. else:
  208. return BoundTypeListModel.objects.filter( id=id, is_delete=False)
  209. else:
  210. return BoundTypeListModel.objects.none()
  211. def get_serializer_class(self):
  212. # 根据操作类型选择合适的序列化器
  213. if self.action in ['list', 'retrieve', 'destroy']:
  214. return serializers.BoundTypeGetSerializer
  215. elif self.action in ['create']:
  216. return serializers.BoundTypePostSerializer
  217. elif self.action in ['update']:
  218. return serializers.BoundTypeUpdateSerializer
  219. elif self.action in ['partial_update']:
  220. return serializers.BoundTypePartialUpdateSerializer
  221. else:
  222. return self.http_method_not_allowed(request=self.request)
  223. def create(self, request, *args, **kwargs):
  224. # 创建一个数据行
  225. data = self.request.data
  226. data['openid'] = self.request.auth.openid
  227. if len(data['bound_type_name']) > 45:
  228. raise APIException({"detail": "The bound type name is set to more than 45 characters"})
  229. if BoundTypeListModel.objects.filter(bound_type_name=data['bound_type_name'],
  230. is_delete=False).exists():
  231. raise APIException({"detail": "Data Exists"})
  232. else:
  233. serializer = self.get_serializer(data=data)
  234. serializer.is_valid(raise_exception=True)
  235. serializer.save()
  236. headers = self.get_success_headers(serializer.data)
  237. return Response(serializer.data, status=200, headers=headers)
  238. def update(self, request, pk):
  239. # 更新一个数据行
  240. qs = self.get_object()
  241. if qs.openid != self.request.auth.openid:
  242. raise APIException({"detail": "Cannot update data which not yours"})
  243. else:
  244. data = self.request.data
  245. if len(data['bound_type_name']) > 45:
  246. raise APIException({"detail": "The bound type name is set to more than 45 characters"})
  247. serializer = self.get_serializer(qs, data=data)
  248. serializer.is_valid(raise_exception=True)
  249. serializer.save()
  250. headers = self.get_success_headers(serializer.data)
  251. return Response(serializer.data, status=200, headers=headers)
  252. def partial_update(self, request, pk):
  253. # 部分更新一个数据行
  254. qs = self.get_object()
  255. if qs.openid != self.request.auth.openid:
  256. raise APIException({"detail": "Cannot partial_update data which not yours"})
  257. else:
  258. data = self.request.data
  259. if len(data['bound_type_name']) > 45:
  260. raise APIException({"detail": "The bound type name is set to more than 45 characters"})
  261. serializer = self.get_serializer(qs, data=data, partial=True)
  262. serializer.is_valid(raise_exception=True)
  263. serializer.save()
  264. headers = self.get_success_headers(serializer.data)
  265. return Response(serializer.data, status=200, headers=headers)
  266. def destroy(self, request, pk):
  267. # 逻辑删除一个数据行
  268. qs = self.get_object()
  269. if qs.openid != self.request.auth.openid:
  270. raise APIException({"detail": "Cannot delete data which not yours"})
  271. else:
  272. qs.is_delete = True
  273. qs.save()
  274. serializer = self.get_serializer(qs, many=False)
  275. headers = self.get_success_headers(serializer.data)
  276. return Response(serializer.data, status=200, headers=headers)
  277. def update(self, request, pk):
  278. # 更新一个数据行
  279. qs = self.get_object()
  280. if qs.openid != self.request.auth.openid:
  281. raise APIException({"detail": "Cannot update data which not yours"})
  282. else:
  283. data = self.request.data
  284. if len(data['bound_bs_name']) > 45:
  285. raise APIException({"detail": "The bound bs name is set to more than 45 characters"})
  286. serializer = self.get_serializer(qs, data=data)
  287. serializer.is_valid(raise_exception=True)
  288. serializer.save()
  289. headers = self.get_success_headers(serializer.data)
  290. return Response(serializer.data, status=200, headers=headers)
  291. def partial_update(self, request, pk):
  292. # 部分更新一个数据行
  293. qs = self.get_object()
  294. if qs.openid != self.request.auth.openid:
  295. raise APIException({"detail": "Cannot partial_update data which not yours"})
  296. else:
  297. data = self.request.data
  298. if len(data['bound_bs_name']) > 45:
  299. raise APIException({"detail": "The bound bs name is set to more than 45 characters"})
  300. serializer = self.get_serializer(qs, data=data, partial=True)
  301. serializer.is_valid(raise_exception=True)
  302. serializer.save()
  303. headers = self.get_success_headers(serializer.data)
  304. return Response(serializer.data, status=200, headers=headers)
  305. def destroy(self, request, pk):
  306. # 逻辑删除一个数据行
  307. qs = self.get_object()
  308. if qs.openid != self.request.auth.openid:
  309. raise APIException({"detail": "Cannot delete data which not yours"})
  310. else:
  311. qs.is_delete = True
  312. qs.save()
  313. serializer = self.get_serializer(qs, many=False)
  314. headers = self.get_success_headers(serializer.data)
  315. return Response(serializer.data, status=200, headers=headers)
  316. class BoundBusinessAPIViewSet(viewsets.ModelViewSet):
  317. pagination_class = MyPageNumberPagination
  318. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  319. ordering_fields = ['id', "create_time", "update_time", ]
  320. filter_class = BoundBSFilter
  321. def get_project(self):
  322. # 获取项目ID,如果不存在则返回None
  323. try:
  324. id = self.kwargs.get('pk')
  325. return id
  326. except:
  327. return None
  328. def get_queryset(self):
  329. # 根据请求用户过滤查询集
  330. id = self.get_project()
  331. if self.request.user:
  332. if id is None:
  333. return BoundBSListModel.objects.filter( is_delete=False)
  334. else:
  335. return BoundBSListModel.objects.filter( id=id, is_delete=False)
  336. else:
  337. return BoundBSListModel.objects.none()
  338. def get_serializer_class(self):
  339. # 根据操作类型选择合适的序列化器
  340. if self.action in ['list', 'retrieve', 'destroy']:
  341. return serializers.BoundBSGetSerializer
  342. elif self.action in ['create']:
  343. return serializers.BoundBSPostSerializer
  344. elif self.action in ['update']:
  345. return serializers.BoundBSUpdateSerializer
  346. elif self.action in ['partial_update']:
  347. return serializers.BoundBSPartialUpdateSerializer
  348. else:
  349. return self.http_method_not_allowed(request=self.request)
  350. def create(self, request, *args, **kwargs):
  351. # 创建一个数据行
  352. data = self.request.data
  353. data['openid'] = self.request.auth.openid
  354. if len(data['bound_bs_name']) > 45:
  355. raise APIException({"detail": "The bound bs name is set to more than 45 characters"})
  356. if BoundBSListModel.objects.filter(bound_bs_name=data['bound_bs_name'],
  357. is_delete=False).exists():
  358. raise APIException({"detail": "Data Exists"})
  359. else:
  360. serializer = self.get_serializer(data=data)
  361. serializer.is_valid(raise_exception=True)
  362. serializer.save()
  363. headers = self.get_success_headers(serializer.data)
  364. return Response(serializer.data, status=200, headers=headers)
  365. def update(self, request, pk):
  366. # 更新一个数据行
  367. qs = self.get_object()
  368. if qs.openid != self.request.auth.openid:
  369. raise APIException({"detail": "Cannot update data which not yours"})
  370. else:
  371. data = self.request.data
  372. if len(data['bound_bs_name']) > 45:
  373. raise APIException({"detail": "The bound bs name is set to more than 45 characters"})
  374. serializer = self.get_serializer(qs, data=data)
  375. serializer.is_valid(raise_exception=True)
  376. serializer.save()
  377. headers = self.get_success_headers(serializer.data)
  378. return Response(serializer.data, status=200, headers=headers)
  379. def partial_update(self, request, pk):
  380. # 部分更新一个数据行
  381. qs = self.get_object()
  382. if qs.openid != self.request.auth.openid:
  383. raise APIException({"detail": "Cannot partial_update data which not yours"})
  384. else:
  385. data = self.request.data
  386. if len(data['bound_bs_name']) > 45:
  387. raise APIException({"detail": "The bound bs name is set to more than 45 characters"})
  388. serializer = self.get_serializer(qs, data=data, partial=True)
  389. serializer.is_valid(raise_exception=True)
  390. serializer.save()
  391. headers = self.get_success_headers(serializer.data)
  392. return Response(serializer.data, status=200, headers=headers)
  393. def destroy(self, request, pk):
  394. # 逻辑删除一个数据行
  395. qs = self.get_object()
  396. if qs.openid != self.request.auth.openid:
  397. raise APIException({"detail": "Cannot delete data which not yours"})
  398. else:
  399. qs.is_delete = True
  400. qs.save()
  401. serializer = self.get_serializer(qs, many=False)
  402. headers = self.get_success_headers(serializer.data)
  403. return Response(serializer.data, status=200, headers=headers)
  404. class BoundCodeTypeAPIViewSet(viewsets.ModelViewSet):
  405. pagination_class = MyPageNumberPagination
  406. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  407. ordering_fields = ['id', "create_time", "update_time", ]
  408. filter_class = BoundCodeTypeFilter
  409. def get_project(self):
  410. # 获取项目ID,如果不存在则返回None
  411. try:
  412. id = self.kwargs.get('pk')
  413. return id
  414. except:
  415. return None
  416. def get_queryset(self):
  417. # 根据请求用户过滤查询集
  418. id = self.get_project()
  419. if self.request.user:
  420. if id is None:
  421. return BoundCodeTypeListModel.objects.filter( is_delete=False)
  422. else:
  423. return BoundCodeTypeListModel.objects.filter( id=id, is_delete=False)
  424. else:
  425. return BoundCodeTypeListModel.objects.none()
  426. def get_serializer_class(self):
  427. # 根据操作类型选择合适的序列化器
  428. if self.action in ['list', 'retrieve', 'destroy']:
  429. return serializers.BoundCodeTypeGetSerializer
  430. elif self.action in ['create']:
  431. return serializers.BoundCodeTypePostSerializer
  432. elif self.action in ['update']:
  433. return serializers.BoundCodeTypeUpdateSerializer
  434. elif self.action in ['partial_update']:
  435. return serializers.BoundCodeTypePartialUpdateSerializer
  436. else:
  437. return self.http_method_not_allowed(request=self.request)
  438. def create(self, request, *args, **kwargs):
  439. # 创建一个数据行
  440. data = self.request.data
  441. data['openid'] = self.request.auth.openid
  442. if len(data['bound_code_type_name']) > 45:
  443. raise APIException({"detail": "The bound code type name is set to more than 45 characters"})
  444. if BoundCodeTypeListModel.objects.filter(bound_code_type_name=data['bound_code_type_name'],
  445. is_delete=False).exists():
  446. raise APIException({"detail": "Data Exists"})
  447. else:
  448. serializer = self.get_serializer(data=data)
  449. serializer.is_valid(raise_exception=True)
  450. serializer.save()
  451. headers = self.get_success_headers(serializer.data)
  452. return Response(serializer.data, status=200, headers=headers)
  453. def update(self, request, pk):
  454. # 更新一个数据行
  455. qs = self.get_object()
  456. if qs.openid != self.request.auth.openid:
  457. raise APIException({"detail": "Cannot update data which not yours"})
  458. else:
  459. data = self.request.data
  460. if len(data['bound_code_type_name']) > 45:
  461. raise APIException({"detail": "The bound code type name is set to more than 45 characters"})
  462. serializer = self.get_serializer(qs, data=data)
  463. serializer.is_valid(raise_exception=True)
  464. serializer.save()
  465. headers = self.get_success_headers(serializer.data)
  466. return Response(serializer.data, status=200, headers=headers)
  467. def partial_update(self, request, pk):
  468. # 部分更新一个数据行
  469. qs = self.get_object()
  470. if qs.openid != self.request.auth.openid:
  471. raise APIException({"detail": "Cannot partial_update data which not yours"})
  472. else:
  473. data = self.request.data
  474. if len(data['bound_code_type_name']) > 45:
  475. raise APIException({"detail": "The bound code type name is set to more than 45 characters"})
  476. serializer = self.get_serializer(qs, data=data, partial=True)
  477. serializer.is_valid(raise_exception=True)
  478. serializer.save()
  479. headers = self.get_success_headers(serializer.data)
  480. return Response(serializer.data, status=200, headers=headers)
  481. def destroy(self, request, pk):
  482. # 逻辑删除一个数据行
  483. qs = self.get_object()
  484. if qs.openid != self.request.auth.openid:
  485. raise APIException({"detail": "Cannot delete data which not yours"})
  486. else:
  487. qs.is_delete = True
  488. qs.save()
  489. serializer = self.get_serializer(qs, many=False)
  490. headers = self.get_success_headers(serializer.data)
  491. return Response(serializer.data, status=200, headers=headers)
  492. class BoundStatusAPIViewSet(viewsets.ModelViewSet):
  493. pagination_class = MyPageNumberPagination
  494. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  495. ordering_fields = ['id', "create_time", "update_time", ]
  496. filter_class = BoundStatusFilter
  497. def get_project(self):
  498. # 获取项目ID,如果不存在则返回None
  499. try:
  500. id = self.kwargs.get('pk')
  501. return id
  502. except:
  503. return None
  504. def get_queryset(self):
  505. # 根据请求用户过滤查询集
  506. id = self.get_project()
  507. if self.request.user:
  508. if id is None:
  509. return BoundStatusListModel.objects.filter( is_delete=False)
  510. else:
  511. return BoundStatusListModel.objects.filter( id=id, is_delete=False)
  512. else:
  513. return BoundStatusListModel.objects.none()
  514. def get_serializer_class(self):
  515. # 根据操作类型选择合适的序列化器
  516. if self.action in ['list', 'retrieve', 'destroy']:
  517. return serializers.BoundStatusGetSerializer
  518. elif self.action in ['create']:
  519. return serializers.BoundStatusPostSerializer
  520. elif self.action in ['update']:
  521. return serializers.BoundStatusUpdateSerializer
  522. elif self.action in ['partial_update']:
  523. return serializers.BoundStatusPartialUpdateSerializer
  524. else:
  525. return self.http_method_not_allowed(request=self.request)
  526. def create(self, request, *args, **kwargs):
  527. # 创建一个数据行
  528. data = self.request.data
  529. data['openid'] = self.request.auth.openid
  530. if len(data['bound_status_name']) > 45:
  531. raise APIException({"detail": "The bound status name is set to more than 45 characters"})
  532. if BoundStatusListModel.objects.filter(bound_status_name=data['bound_status_name'],
  533. is_delete=False).exists():
  534. raise APIException({"detail": "Data Exists"})
  535. else:
  536. serializer = self.get_serializer(data=data)
  537. serializer.is_valid(raise_exception=True)
  538. serializer.save()
  539. headers = self.get_success_headers(serializer.data)
  540. return Response(serializer.data, status=200, headers=headers)
  541. def update(self, request, pk):
  542. # 更新一个数据行
  543. qs = self.get_object()
  544. if qs.openid != self.request.auth.openid:
  545. raise APIException({"detail": "Cannot update data which not yours"})
  546. else:
  547. data = self.request.data
  548. if len(data['bound_status_name']) > 45:
  549. raise APIException({"detail": "The bound status name is set to more than 45 characters"})
  550. serializer = self.get_serializer(qs, data=data)
  551. serializer.is_valid(raise_exception=True)
  552. serializer.save()
  553. headers = self.get_success_headers(serializer.data)
  554. return Response(serializer.data, status=200, headers=headers)
  555. def partial_update(self, request, pk):
  556. # 部分更新一个数据行
  557. qs = self.get_object()
  558. if qs.openid != self.request.auth.openid:
  559. raise APIException({"detail": "Cannot partial_update data which not yours"})
  560. else:
  561. data = self.request.data
  562. if len(data['bound_status_name']) > 45:
  563. raise APIException({"detail": "The bound status name is set to more than 45 characters"})
  564. serializer = self.get_serializer(qs, data=data, partial=True)
  565. serializer.is_valid(raise_exception=True)
  566. serializer.save()
  567. headers = self.get_success_headers(serializer.data)
  568. return Response(serializer.data, status=200, headers=headers)
  569. def destroy(self, request, pk):
  570. # 逻辑删除一个数据行
  571. qs = self.get_object()
  572. if qs.openid != self.request.auth.openid:
  573. raise APIException({"detail": "Cannot delete data which not yours"})
  574. else:
  575. qs.is_delete = True
  576. qs.save()
  577. serializer = self.get_serializer(qs, many=False)
  578. headers = self.get_success_headers(serializer.data)
  579. return Response(serializer.data, status=200, headers=headers)
  580. class MultipleViewSet(viewsets.ModelViewSet):
  581. authentication_classes = []
  582. pagination_class = MyPageNumberPagination
  583. permission_classes = []
  584. throttle_classes = []
  585. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  586. ordering_fields = ['-id', ]
  587. filter_class = Filter
  588. def get_project(self):
  589. # 获取项目ID,如果不存在则返回None
  590. try:
  591. id = self.kwargs.get('pk')
  592. return id
  593. except:
  594. return None
  595. def get_queryset(self):
  596. # 根据请求用户过滤查询集
  597. id = self.get_project()
  598. if self.request.user:
  599. if id is None:
  600. return ListModel.objects.filter(is_delete=False)
  601. else:
  602. return ListModel.objects.filter(id=id, is_delete=False)
  603. else:
  604. return ListModel.objects.none()
  605. def get_serializer_class(self):
  606. # 根据操作类型选择合适的序列化器
  607. if self.action in ['list', 'retrieve']:
  608. return serializers.WarehouseGetSerializer
  609. else:
  610. return self.http_method_not_allowed(request=self.request)
  611. class ProductAPIViewSet(viewsets.ModelViewSet):
  612. pagination_class = MyPageNumberPagination
  613. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  614. ordering_fields = ['id', "create_time", "update_time", ]
  615. filter_class = ProductFilter
  616. def get_project(self):
  617. # 获取项目ID,如果不存在则返回None
  618. try:
  619. id = self.kwargs.get('pk')
  620. return id
  621. except:
  622. return None
  623. def get_queryset(self):
  624. # 根据请求用户过滤查询集
  625. id = self.get_project()
  626. if self.request.user:
  627. if id is None:
  628. return ProductListModel.objects.filter(is_delete=False)
  629. else:
  630. return ProductListModel.objects.filter(id=id, is_delete=False)
  631. else:
  632. return ProductListModel.objects.none()
  633. def get_serializer_class(self):
  634. # 根据操作类型选择合适的序列化器
  635. if self.action in ['list', 'retrieve', 'destroy']:
  636. return serializers.ProductGetSerializer
  637. elif self.action in ['create']:
  638. return serializers.ProductPostSerializer
  639. elif self.action in ['update']:
  640. return serializers.ProductUpdateSerializer
  641. elif self.action in ['partial_update']:
  642. return serializers.ProductPartialUpdateSerializer
  643. else:
  644. return self.http_method_not_allowed(request=self.request)
  645. def create(self, request, *args, **kwargs):
  646. # 创建一个数据行
  647. data = self.request.data
  648. if len(data['product_name']) > 45:
  649. raise APIException({"detail": "The product name is set to more than 45 characters"})
  650. if ProductListModel.objects.filter(product_code=data['product_code'],
  651. is_delete=False).exists():
  652. raise APIException({"detail": "Data Exists"})
  653. else:
  654. serializer = self.get_serializer(data=data)
  655. serializer.is_valid(raise_exception=True)
  656. serializer.save()
  657. headers = self.get_success_headers(serializer.data)
  658. return Response(serializer.data, status=200, headers=headers)
  659. def update(self, request, pk):
  660. # 更新一个数据行
  661. qs = self.get_object()
  662. data = self.request.data
  663. if len(data['product_name']) > 45:
  664. raise APIException({"detail": "The product name is set to more than 45 characters"})
  665. if ProductListModel.objects.filter(product_code=data['product_code'],
  666. is_delete=False).exists():
  667. raise APIException({"detail": "Data Exists"})
  668. serializer = self.get_serializer(qs, data=data)
  669. serializer.is_valid(raise_exception=True)
  670. serializer.save()
  671. headers = self.get_success_headers(serializer.data)
  672. return Response(serializer.data, status=200, headers=headers)
  673. def partial_update(self, request, pk):
  674. # 部分更新一个数据行
  675. qs = self.get_object()
  676. data = self.request.data
  677. if len(data['product_name']) > 45:
  678. raise APIException({"detail": "The product name is set to more than 45 characters"})
  679. if ProductListModel.objects.filter(product_code=data['product_code'],
  680. is_delete=False).exists():
  681. raise APIException({"detail": "Data Exists"})
  682. serializer = self.get_serializer(qs, data=data, partial=True)
  683. serializer.is_valid(raise_exception=True)
  684. serializer.save()
  685. headers = self.get_success_headers(serializer.data)
  686. return Response(serializer.data, status=200, headers=headers)
  687. def destroy(self, request, pk):
  688. # 逻辑删除一个数据行
  689. qs = self.get_object()
  690. qs.is_delete = True
  691. qs.save()
  692. serializer = self.get_serializer(qs, many=False)
  693. headers = self.get_success_headers(serializer.data)
  694. return Response(serializer.data, status=200, headers=headers)