Как решить Django rest-framework JSON Ошибка разбора - PullRequest
1 голос
/ 21 февраля 2020

Что не так с этим JSON? при попытке отправить POST-запрос с POSTMAN, получая JSON ОШИБКА PARSE.

Ошибка почтальона

{
  "detail": "JSON parse error - Expecting ',' delimiter: line 5 column 13 (char 82)"
}

JSON Отправка данных от почтальона

{
"menu_name": "indian_menu",
"slug": "indianmenu",
"item_name": [
    "category": "indianmenu",
  ]
}

rest_framework Сериализаторы

class MenuCardSerializer(serializers.ModelSerializer):

  class Meta:
    model = MenuCard
    fields = '__all__'
    read_only_fields = ('menu_name', )

class MenuSerializer(serializers.ModelSerializer):

category = MenuCardSerializer(required=True, many=True)

  class Meta:
    model = Menu
    fields = '__all__'

  def create(self, validated_data):
    category = validated_data.pop('category')
    menu = MenuCard.objects.create(**validated_data)
    for choice in category:
        Menu.objects.create(**choice, category=menu)

rest_framework API_VIEWS

@api_view(['GET', 'POST', 'PUT', 'DELETE', ])
def simple_menu(request, slug):

print("simple menu slug : " + slug)

if request.method == 'GET':
    category_list = Menu.objects.all()
    serializer = MenuSerializer(category_list)
    return JsonResponse(serializer.data)

elif request.method == 'POST':
    serializer = MenuSerializer(data=request.data, many=False)
    data = {}
    if serializer.is_valid():
        serializer.save()
        data["success"] = "item Catagory Created"
        return JsonResponse(data=data, status=status.HTTP_200_OK)
    return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Вы JSON от почтальона недопустимы, вы можете легко проверить его с помощью любого JSON валидатора.

В вашем первом примере это должен быть список, а не список, упомянутый oz19. Та же проблема во втором, правильная примерно такая:

{ 
   "menu_name":"Indian Menu",
   "slug":"indianmenu",
   "item_name":[ 
      { 
         "category":"Indian Menu",
         "item_name":"dal",
         "price":"22.30",
         "stock":"10"
      }
   ]
}
0 голосов
/ 21 февраля 2020

Возможно, ошибка связана с данными, которые вы вводите в Почтальон. На item_name вы, вероятно, хотели создать dict, но это list.

Изменение:

{
  ...
  "item_name": [ "category": "indian_menu"]
}

By:

{
  ...
  "item_name": { "category": "indian_menu" }
}
...