我没有在APIView中获得数据

时间:2018-01-16 04:44:44

标签: python django django-rest-framework

在我的APIView中:

data = {
    "user":user_dict,  # the user_dict have data.
    "account":account_dict  # the account_dict have data too.
      }

serializer = UserInfoSerializer(data=data)
is_valid = serializer.is_valid()  # the `is_valid` is True

return Response(data=serializer.validated_data, status=HTTP_200_OK)

但是当我访问这个APIView时,我什么都没得到。

enter image description here

UserInfoSerializer代码如下:

class UserInfoSerializer(Serializer):
    user = serializers.DictField(read_only=True)
    account = serializers.DictField(read_only=True)

1 个答案:

答案 0 :(得分:0)

发生这种情况的原因是因为应该如何使用serializer.DictField的语义。当您创建一个dict字段时,您需要告诉序列化程序字典中值的类型是什么。例如,假设" user"是这样的字典:{"user1": "bob", "user2": "alice"}。然后你需要告诉序列化程序子值是字符串,或者CharField是这样的:

class UserInfoSerializer(Serializer):
    user = serializers.DictField(read_only=True, child=serializers.CharField())

如果帐户为{"account1": 1, "account2": 2},那么您可以这样做:

class UserInfoSerializer(Serializer):
    user = serializers.DictField(read_only=True, child=serializers.CharField())
    account = serializers.DictField(read_only=True, child=serializers.IntegerField())

我在本地进行了测试,这似乎解决了这个问题。您可以在djangos docs here中详细了解如何使用DictField。

如果您的数据没有始终为单一类型的值,我建议您使用JSONField,您可以阅读here。它看起来像这样:

class UserInfoSerializer(Serializer):
    user = serializers.JSONField()
    account = serializers.JSONField()
祝你好运!