Post запрос Api Django

У меня есть метод post. При вызове метода получаю ошибку File "C:\Users\79633\PycharmProjects\DiplomProject\python-final-diplom\orders\api\views.py", line 296, in post items_dict = load_json(items) TypeError: Expected string or C-contiguous bytes-like object [01/Feb/2023 12:32:11] "POST /cart HTTP/1.1" 500 89403

Вот мой файл views.py


class CartView(APIView):

permission_classes = [IsAuthenticated]

def get(self, request, *args, **kwargs):
    """Функция для получения содержимого корзины"""
    cart = Order.objects.filter(
        user_id=request.user.id, status='cart'
    ).prefetch_related('ordered_items').annotate(
        total_sum=Sum('ordered_items__total_amount'),
        total_quantity=Sum('ordered__items_quantity')
    )
    serializer = OrderSerializer(cart, many=True)
    return Response(serializer.data)

def post(self, request, *args, **kwargs):
    '''
    добавление товаров в корзину
    '''
    items = request.data.get('items')
    if items:
        try:
            items_dict = load_json(items)
        except ValueError:
            Response({'Status': False, 'Errors': 'Неверный формат запроса'})
        else:
            cart, _ = Order.objects.get_or_create(user_id=request.user.id, status='cart')
            objects_created = 0
            for order_item in items_dict:
                order_item.update({'order': cart.id})
                product = Product.objects.filter(external_id=order_item['external_id']).values('category', 'shop', 'name', 'price')
                order_item.update({'category': product[0]['category'], 'shop': product[0]['shop'], 'product_name': product[0]['name'], 'price': product[0]['price']})
                serializer = OrderItemAddSerializer(data=order_item)
                if serializer.is_valid():
                    try:
                        serializer.save()
                    except IntegrityError as error:
                        return Response({'status': False, 'errors': str(error)},
                                        status=status.HTTP_400_BAD_REQUEST)
                    else:
                        objects_created += 1
                else:
                    return Response({'status': False, 'error': serializer.errors},
                                    status=status.HTTP_400_BAD_REQUEST)
            return Response({'status': True, 'num_objects': objects_created})

    return Response({'status': False, 'error': 'Не указаны необходимые поля'},
                    status=status.HTTP_400_BAD_REQUEST)

def put(self, request, *args, **kwargs):
    """Функция для изменения количества товара в корзине"""
    items = request.data.get('items')
    if items:
        try:
            items_dictionary = loads(items)
        except ValueError:
            Response({'Status': False, 'Errors': 'Неверный формат запроса'})
        else:
            cart, _ = Order.objects.get_or_create(user_id=request.user.id, status='cart')
            objects_updated = 0
            for item in items_dictionary:
                if isinstance(item['id'], int) and isinstance(item['quantity'], int):
                    objects_updated += OrderItem.objects.filter(order_id=cart.id, id=item['id']).update(
                        quantity = item['quantity'])
            return Response({'status': True, 'edit_objects': objects_updated})
    return Response({'status': False, 'error': 'Не указаны все поля'},
    status=status.HTTP_400_BAD_REQUEST)

def delete(self, request, *args, **kwargs):
    """Функция для удаления товара из корзины"""
    items = request.data.get('items')
    if items:
        items_list = items.split(',')
        cart, _ = Order.objects.get_or_create(user_id=request.user.id, status='cart')
        query = Q()
        objects_deleted = False
        for item_id in items_list:
            if item_id.isdigit():
                query = query | Q(order_id=cart.id, id=item_id)
                objects_deleted = True

        if objects_deleted:
            count = OrderItem.objects.filter(query).delete()[0]
            return Response({'status': True, 'del_objects': count}, status=status.HTTP_204_NO_CONTENT)
    return Response({'status': False, 'error': 'Не указаны все поля'}, status=status.HTTP_400_BAD_REQUEST)

Делаю запрос

###
POST http://localhost:8000/cart
Content-Type: application/json
Authorization: Token b2395b613c581c322a833c9ff8661cbf8d248a70

{
    "items": [{"external_id": 4, "quantity": 2}]
}

Помогите исправить ошибку в коде

Вернуться на верх