【问题标题】:How do I make tastypie accept a JSONField?如何让美味派接受 JSONField?
【发布时间】:2012-05-14 16:14:07
【问题描述】:

我收到“错误请求:'' 不是有效的 JSON 字符串。”当我尝试将数据发布到我的美味派 API 时。 API 包含一个 ModelResource,它基于一个具有JSONField 的模型。 JSONfield 继承自标准 TextField django 字段。

如果将 JSONField 更改为 TextField,则数据已接收,一切正常。

我的代码是这样的:

模型.py

class MyModel(models.Model):
   data = jsonfield.JSONField() # If i change this to a TextField everything works
   ...

api.py

class MyModel(ModelResource):
    #Resource for MyModel()
    ...
    class Meta:
        queryset = MyModel.objects.all()
        authentication = Authentication()
        authorization = Authorization()
        list_allowed_methods = ['get', 'post']

this 的启发,我尝试覆盖默认的 ModelResource,但无法使其正常工作。

所以总结一下,我如何让 sweetpie 接受 JSONField?

【问题讨论】:

    标签: django json field tastypie bad-request


    【解决方案1】:

    所以我终于找到了问题所在。

    当 django 收到请求时,它会创建一个初始的空 MyModel 对象。由于我的模型 JSONField 没有默认值,它使用超类的默认值,即空字符串“”。当 JSONField 启动空字符串“”时,它会引发一个异常,指出“'' 不是有效的 JSON 字符串。”。这会进一步触发 400 BAD REQUEST 响应。

    我认为这是 JSONField 包中的一个错误,它应该有 None 作为默认值。

    然而,解决此问题的一个简单方法是像这样更改模型:

    class MyModel(models.Model):
       data = jsonfield.JSONField(default=None)
       ...
    

    【讨论】:

    猜你喜欢
    • 2012-10-30
    • 2014-01-23
    • 1970-01-01
    • 2012-04-18
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多