无法手动使用我的DRF序列化程序

时间:2014-12-09 14:47:37

标签: django serialization django-rest-framework

非常奇怪,但每当我尝试使用任何DRF序列化程序来序列化对象时,例如:

me = CustomUser.objects.all()[0]
serializer = CustomUserSerializer(me)

serializer.is_valid()
# --> False
print(serializer.errors)
# {"non_field_errors": ["No input provided"]}

这种情况发生在完全不同的序列化器和各种对象上。

但是,如果我使用基于类的视图(间接使用相同的序列化程序和相同的对象),我能够收到JSON响应,并按预期序列化数据。换句话说,调用链接到此视图的端点

class CustomUserList(generics.ListAPIView):
    queryset = CustomUser.objects.all()
    serializer_class = CustomUserSerializer

确实会返回数据库中所有CustomUsers的JSON表示。

必须有一些我不太了解的东西。

1 个答案:

答案 0 :(得分:4)

Django REST Framework允许您通过instance关键字(或第一个位置参数)将对象传递给序列化程序来序列化对象。从那里,您只需要在其上调用data即可。这些都包含在文档的serializing objects部分中。

me = CustomUser.objects.all()[0]
serializer = CustomUserSerializer(me)
serializer.data

您只需在deserializing data into an object时致电is_valid。您得到的错误("没有提供输入")是因为您正在尝试验证要反序列化的数据,但是您没有传入任何数据。