Не удается отправить элемент в базу данных, Django

У меня есть модель под названием CurrentBestSellersListItem, с целым полем, некоторыми CharFields и URLField. У меня также есть сериализатор для данной модели. Я могу создавать экземпляры CurrentBestSellersListItem в базе данных вручную из http://127.0.0.1:8000/admin/lists/currentbestsellerslistitem/add/, т.е. из панели администратора, но не могу создать их по другому маршруту. Другой маршрут, который у меня есть (в urls.py) это:

path('list-items-create/', views.create_saved_list_item, name='create_saved_list_item'),

а функция create_saved_list_item в файле views.py имеет вид:

@api_view(['POST'])
def create_saved_list_item(request): 
  json_object = json.dumps(request.data, indent = 1) 
  serializer = CurrentBestSellersListItemSerializer(data=json_object)
  if serializer.is_valid(): 
    serializer.save()
  return Response(serializer.data)

Если я перейду по адресу http://127.0.0.1:8000/api/list-items-create/ и размещу следующие данные:

{
"rank": 555, 
"weeks_on_list": 555, 
"publisher": "a", 
"description": "b", 
"title": "c", 
"author": "d",
"amazon_product_url": "amazon.com/books/5"
}

тогда я получаю такой ответ:

HTTP 200 OK
Allow: OPTIONS, POST
Content-Type: application/json
Vary: Accept

{}

и элемент НЕ добавляется в подключенную базу данных, как ожидалось. Может ли кто-нибудь из вас определить, где ошибка?

В вашем коде есть несколько проблем.

Прежде всего, вы не должны использовать json.dumps(), так как сериализатор принимает не строку, а дикт для создания вашей модели. В зависимости от того, как структурирован ваш запрос, вы можете напрямую передать тело запроса или JSON запроса в сериализатор.

json_object = json.parse(request.data) 
serializer = CurrentBestSellersListItemSerializer(data=json_object)

Второе - вы не возвращаете никакого сообщения или информации в случае, если данные не действительны.

if serializer.is_valid(): 
    serializer.save()

Просто добавьте регистрацию ошибок, чтобы выяснить, что не так с данными, которые вы отправляете.

if serializer.is_valid():
    serializer.save()
else:
    return JSONResponse({'errors': serializer.errors, 'input_data': json_object, 'validated_data': serializer.validated_data})

Если вам не нравится возвращать JSONResponse с деталями ошибки, вы можете просто добавить raise_exception=True к вашей валидации.

if serializer.is_valid(raise_exception=True): 
    serializer.save()
Вернуться на верх