def delete(self, request, category_id, format=None): category = self.get_object(request, category_id) nested_categories = self.get_nested_objects(request, category) errors = {} data = {'is_deleted': True} try: with transaction.atomic(): for cat in nested_categories: serializer = CategorySerializer(cat, data=data, partial=True) if serializer.is_valid(): serializer.save() # meals in deleted category marked as "deleted" meals = Meal.objects.filter(category=cat) for meal in meals: meal_serializer = MealSerializer(meal, data, partial=True) if meal_serializer.is_valid(): meal_serializer.save() else: errors = meal_serializer.errors raise Exception('Serialize errors') else: errors = serializer.errors raise Exception('Serialize errors') except Exception as exc: if errors: return Response(errors, status=status.HTTP_400_BAD_REQUEST) return Response(str(exc), status=status.HTTP_400_BAD_REQUEST) return Response(status=status.HTTP_204_NO_CONTENT)
def post(self, request, category_id=None, format=None): data = request.data.copy() data.pop('parent') parent = request.data['parent'] if parent == '#': parent_category = None parent_path = '' else: parent_category = Category.objects.get(pk=parent) if parent_category.parent_path: parent_path = parent_category.parent_path + '/' + str( parent_category.id) else: parent_path = str(parent_category.id) user = User(pk=request.user.id) category = Category(parent=parent_category, user=user, parent_path=parent_path) serializer = CategorySerializer(category, data=data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def update_category(request, pk): """ 修改指定分类 --- serializer: menu.serializers.CategorySerializer omit_serializer: false responseMessages: - code: 202 message: Accepted - code: 404 message: Not Found - code: 401 message: Not authenticated """ try: category = Category.objects.get(pk=pk) except Category.DoesNotExist: return Response('category not found', status=status.HTTP_404_NOT_FOUND) serializer = CategorySerializer(category, data=request.DATA, partial=True) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_202_ACCEPTED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def list(self, request, *args, **kwargs): page = self.paginate_queryset(self.queryset) if page is not None: serializer = CategorySerializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = CategorySerializer(self.queryset, many=True) return Response(serializer.data, status=HTTP_200_OK)
def put(self, request, category_id, format=None): category = self.get_object(request, category_id) serializer = CategorySerializer(category, data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def list_category_by_menu(request, menu_pk): """ 分类列表 --- serializer: menu.serializers.CategorySerializer omit_serializer: false responseMessages: - code: 200 message: OK - code: 404 message: Not Found - code: 401 message: Not authenticated """ categories = [] try: menu = Menu.objects.get(pk=menu_pk) except Menu.DoesNotExist: return Response('menu not found', status=status.HTTP_404_NOT_FOUND) for category in menu.categories.order_by('id'): categories.append(category) serializer = CategorySerializer(categories, many=True) return Response(serializer.data, status=status.HTTP_200_OK)
def get(self, request, category_id=None, format=None): user = User(pk=request.user.id) categories_queryset = Category.objects.filter(user=user).order_by( 'parent_path', 'name') categories_list = categories_queryset.all() serializer = CategorySerializer(categories_list, many=True) resp = Response(serializer.data) categories_tree = get_categories_tree(resp.data) return Response(categories_tree)
def create_category(request): """ 创建分类 --- serializer: menu.serializers.CategorySerializer omit_serializer: false responseMessages: - code: 201 message: Created - code: 400 message: Bad Request - code: 401 message: Not authenticated """ data = request.DATA.copy() serializer = CategorySerializer(data=data) if serializer.is_valid(): category = serializer.save() category.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get_category(request, pk): """ 获取指定分类 --- serializer: menu.serializers.CategorySerializer omit_serializer: false responseMessages: - code: 200 message: OK - code: 404 message: Not Found - code: 401 message: Not authenticated """ try: category = Category.objects.get(pk=pk) except Category.DoesNotExist: return Response('category not found', status=status.HTTP_404_NOT_FOUND) serializer = CategorySerializer(category) return Response(serializer.data, status=status.HTTP_200_OK)
def get(self, request, category_id, format=None): category = self.get_object(request, category_id) serializer = CategorySerializer(category) return Response(serializer.data)