【问题标题】:Serializer always not valid - ApiView序列化程序始终无效 - ApiView
【发布时间】:2016-04-20 17:57:44
【问题描述】:

为什么我总是出现“此字段为必填项”错误并且print serializer.data 为空?

编辑:只有当我使用“HTML 表单”时——在“原始数据”中它才能正常工作。

序列化器.py

class TaskSerializer(serializers.Serializer):
    task_id = serializers.IntegerField(required=True)
    email = serializers.EmailField(required=True)
    email_to = serializers.EmailField(required=True)

views.py

class TaskAPIView(APIView):
    serializer_class = TaskSerializer

    def post(self, request):
        serializer = self.serializer_class(**{'data': request.data})
        serializer.is_valid()
        print serializer.data
        return Response(serializer.data, status=status.HTTP_201_CREATED)

【问题讨论】:

  • 您使用的是哪个版本的 DRF?
  • Django 版本==1.8.12
  • @awwester 如果我使用“Html 表单”,我有:“detail”:"CSRF Failed: CSRF token missing or incorrect."。使用原始数据可以正常工作:{"task_id": 5}

标签: django django-rest-framework


【解决方案1】:

我试图重现这一点,但使用您的确切代码对我来说效果很好 - 我在 print 语句中看到 request.data

我一直都是这样做的SerializerClass(data=request.data),这也是他们在the source 中的做法。也许试试self.serializer_class(data=request.data) 看看是否有什么不同。除此之外,鉴于当前代码,我没有任何其他想法。

【讨论】:

  • self.serializer_class(data=request.data) 相同。你能告诉我你在 settings.py 中的 DRF 设置吗?
  • 只是 1.8.3 的默认设置,并将 'rest_framework', 'api', 添加到 INSTALLED_APPS api 只是我创建的应用程序。我正在使用 python 3,可能会有所作为
  • 您通过内置可浏览 api 发送请求时收到此错误,对吗?
猜你喜欢
  • 2020-03-23
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多