首页 > 解决方案 > Django Rest Framework 的序列化器中的 JSONField

问题描述

我正在尝试创建一个只有一个 JSONField 的序列化程序

class DataSerializer(serializers.Serializer):
    data = serializers.JSONField()

当我尝试在 shell 中使用这个序列化程序时 -

>>> s = DataSerializer(data={"name": "Tom"})
>>> s.is_valid()
False
>>> s.errors
{'data': [ErrorDetail(string='This field is required.', code='required')]}

我不知道我做错了什么。如果这是一个太简单的问题,请多多包涵,因为我是使用 DRF 的新手。

标签: djangodjango-rest-framework

解决方案


这是您必须发送数据的方式:

s = DataSerializer(data={"data" : {"name": "Tom"}})

也许,您选择将您的 jsonfield 命名为“数据”让您有点困惑。

构造序列化器时的参数data只是一个用于设置要序列化的数据的参数。

当您调用 时is_valid,它会查看传递给序列化程序的数据并尝试查找data在这种情况下命名的 JSONField。

如果您将其重命名为 jsondata,它会尝试在数据中查找 jsondata。在这种情况下,你会这样做:

s = DataSerializer(data={"jsondata" : {"name": "Tom"}})

希望很清楚。


推荐阅读