【问题标题】:django serializer is_valid() return falsedjango 序列化器 is_valid() 返回 false
【发布时间】:2018-10-13 12:54:43
【问题描述】:

使用 django 2.0.2 Python 3.4

MySerializers.py

class MySerializer(BaseSerializer):
    UserUID = serializers.CharField()
    DeviceUID = serializers.CharField()
    SessionId = serializers.CharField()

MyView.py

class MyVeiw(BaseViewSet):
    serializer_class = MySerializer

    def create(self, request, *args, **kwargs):
        serializer_class = MySerializer(data=request.data.dict())
        if serializer_class.is_valid():
            print(serializer_class.errors)
            return Response(0)
        else:
            return Response(1)

输入数据

{'SessionId': '222a282f-c3f8-46d2-8476-8d4ec627a477', 'UserUID': '62', 'DeviceUI
D': '25'}

serializer_class

 return MySerializer(data={'SessionId': '7c5d0530-8e54-42aa-91a0-ce8776c82490', 'Us
erUID': '64', 'DeviceUID': '27'}):
    UserUID = CharField()
    DeviceUID = CharField()
    SessionId = CharField()

serializer_class.initial_data

return {'UserUID': '65', 'DeviceUID': '28', 'SessionId': 'aecef14f-
       7f9d-4f01-bc1d-89514  8ab0c05'}

serializer_class.errors

return {}

is_valid() 始终是false

为什么会出错return empty list

我尝试更改 SessionId UUIDField() 但不起作用

UserUID , DeviceUID 更改 IntegerField() 但不起作用

我认为这个序列化器是有效的为什么返回 false

【问题讨论】:

  • 您的BaseSerializer 课程是什么?如果它是 drf 类,您应该添加 to_internal_value 来调用 is_valid
  • 什么是BaseViewSet
  • 请指定您使用的drf的类?我认为“BaseSerializer”和“BaseViewSet”是你的自定义类。

标签: python django django-rest-framework django-serializer


【解决方案1】:

class MySerializer(BaseSerializer): 更改为class MySerializer(Serializer):

正如熊布朗所说;如果您从BaseSerialzier 继承,则应自己定义to_internal_value

默认情况下,BaseSerializer 引发 NotImplementedError

def to_internal_value(self, data):
    raise NotImplementedError('`to_internal_value()` must be implemented.')

【讨论】:

    猜你喜欢
    • 2018-01-22
    • 2012-05-11
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多