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}]
}
Помогите исправить ошибку в коде