views.py 37 KB

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