向 Django Rest Framework API 发送 POST 请求时"This field is required"



>我正在尝试创建一个新Category,它只需要填写name字段,但它坚持显示错误说这是必需的。

models.py

class Category(models.Model):
    name = models.CharField(max_length=32, unique=True)
    created_at = models.DateTimeField(default=timezone.now)
    updated_at = models.DateTimeField(default=timezone.now)
    def __str__(self):
        return self.name

serializers.py

class CategorySerializer(serializers.Serializer):
    id = serializers.IntegerField(required=False)
    name = serializers.CharField(max_length=32)
    def create(self, validated_data):
        return Category.objects.create(**validated_data)
    def update(self, instance, validated_data):
        pass

views.py

class CategoryList(APIView):
    def get(self, request):
        """
        Gets all the existing categories
        :param request:
        :return: Category
        """
        categories = Category.objects.all().filter().order_by("name")
        serializer = CategorySerializer(categories, many=True)
        return Response(serializer.data)
    def post(self, request):
        """
        Create one new category
        :param request:
        :return: Category
        """
        serializer = CategorySerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=HTTP_201_CREATED)
        return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)

例如,Priting request.data向我展示了:{'data': {'name': 'Withdrawal'}} .它显示正在发送和接收数据,但我不明白为什么会出现此错误。

我发现多亏了Daniel Roseman。碰巧我正在使用 React 和 Redux,我的操作如下:

export function createCategory({ data }) {
  return {
    [CALL_API]: {
      endpoint: '/api/categories/',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({data}),
      types: [CREATE_CATEGORY, CREATE_CATEGORY_SUCCESS, CREATE_CATEGORY_FAILURE],
    },
  }
}

解决方案是删除body属性中的大括号。

相关内容

最新更新