【问题标题】:JSONField in Serializers of Django Rest FrameworkDjango Rest Framework 的序列化器中的 JSONField
【发布时间】:2018-08-23 06:21:54
【问题描述】:

我正在尝试创建一个只有一个 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 的新手。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

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

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

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

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

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

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

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

    希望清楚。

    【讨论】:

    • 为什么我们需要在那里传递额外的数据键?是不是每个序列化器都有一个默认的data参数?
    • 您没有传递额外的数据密钥。将序列化程序中的数据重命名为其他名称,您可能会更好地理解。我将在答案中包含简要说明。
    猜你喜欢
    • 2015-06-29
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2018-06-23
    • 2016-09-29
    • 2014-07-07
    • 2018-06-05
    相关资源
    最近更新 更多