1

我收到“错误请求:'' 不是有效的 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']

受此启发我尝试覆盖默认的 ModelResource,但我无法让它工作。

总而言之,我如何让tastepie接受JSONField?

4

1 回答 1

3

所以我终于弄清楚了问题所在。

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

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

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

class MyModel(models.Model):
   data = jsonfield.JSONField(default=None)
   ...
于 2012-05-16T20:56:07.700 回答