我收到了“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?
答案 0 :(得分:3)
所以我终于找到了问题。
当django收到请求时,会导致创建一个初始的空MyModel对象。由于我的模型JSONField没有默认值,因此它使用超类的默认值,即空字符串“”。当JSONField启动时,空字符串“”会引发一个异常,说“''不是有效的JSON字符串。”这进一步触发了400 BAD REQUEST响应。
我认为这是JSONField包中的一个错误,它应该将 None 作为默认值。
这个问题的一个简单方法就是改变模型:
class MyModel(models.Model):
data = jsonfield.JSONField(default=None)
...