sil*_*iud 7 django json tastypie
我有一个使用JSONField的mysql表,它是TextField(django)类型.这就是我的模型的样子
from django.db import models
from json_field import JSONField
class Model(models.Model):
obj = JSONField()
Run Code Online (Sandbox Code Playgroud)
我通过tastypie发送的值是
json_string = '{"data":"value"}'
Run Code Online (Sandbox Code Playgroud)
进入数据库,我可以看到
{"data":"value"}
Run Code Online (Sandbox Code Playgroud)
但是当用curl反复查找数据时,我会得到类似的结果
"{u'data': u'value'}"
Run Code Online (Sandbox Code Playgroud)
我能做些什么才能将python u'field'表示为tastypie的输出?
谢谢!
我修复了这个问题:
def dehydrate_user_inputs(self, bundle):
requirement = Requirement.objects.get(pk = bundle.obj.pk)
user_inputs = json.dumps(requirement.user_inputs)
return user_inputs
Run Code Online (Sandbox Code Playgroud)
我的JSONField名为user_inputs.要求是它所属的模型.
当Tastypie已经为我做过这样的事情时,我在这里做查询时感到很奇怪,但是,这很有效.如果有更好的解决方案,我会很高兴.
您看到的错误是由 Tastypie 将 JSONField 视为 TextArea 并在将 JSONField 返回的对象返回给调用者之前调用 str() 引起的。
另一种方法是使用 fields.ApiFields 作为 JSONField。这是有效的,因为 fields.ApiFields 不会对传入 (Hydrate()) 或传出 (convert()) 执行任何转换。这正是我们想要的 - 底层 JSONField 会将 JSON 对象转换为字符串,以便在传入时持久保存,并在传出时从字符串重新创建对象。因此,tastypie 不需要做任何事情。我的代码看起来有点像这样(基于OP示例的类/变量名称)-
class JSONField(fields.apiField):
""" Wrapper over fields.apiField to make what we're doing here clear """
pass
class MyModelResource(ModelResource):
obj = JSONField('obj')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2648 次 |
| 最近记录: |