在我的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时,我什么都没得到。
UserInfoSerializer
代码如下:
class UserInfoSerializer(Serializer):
user = serializers.DictField(read_only=True)
account = serializers.DictField(read_only=True)
答案 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()
祝你好运!