如何让tastypie接受JSONField?

时间:2012-05-14 16:14:07

标签: django json field tastypie bad-request

我收到了“BAD REQUEST:''不是有效的JSON字符串。”当我尝试将数据发布到我的tastypie API时。 API由ModelResource组成,ModelResource基于具有JSONField的模型。 JSONfield继承自标准的TextField django字段。

如果将JSONField更改为TextField,则会收到数据并且一切正常。

我的代码与此类似:

model.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,但我无法让它工作。

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

1 个答案:

答案 0 :(得分:3)

所以我终于找到了问题。

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

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

这个问题的一个简单方法就是改变模型:

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