Tastypie和JSON字段序列化问题

时间:2013-11-14 22:00:45

标签: python django tastypie

所以我在没有找到答案的情况下阅读了以下帖子:

我的模型使用JSONField来存储任意数据。

class Task(models.Model):
    """
        Execution of a Test
    """
    results = JSONField(max_length=1000, blank=True)

在python shell中,我可以打印这个字段,它呈现如下:

[{"name": "tata", "result": "toto"}]

我修改脱水方法以删除unicode,但我有以下结果:

**Dehydrate Method:**
def dehydrate_results(self, bundle):
    results = json.dumps(bundle.obj.results)
    return results 

**Tastypie Result**
"results": "[{\"name\": \"Cash In\", \"result\": \"toto\"}]"

我无法在我的javascript应用程序中使用此对象...也许你可以解释我如何从tastypie获得“正常”的json输出:

**Wanted Tastypie Result**
"results": [{"name": "Cash In", "result": "toto"}]

感谢。

2 个答案:

答案 0 :(得分:7)

如果我没有弄错的话,您不需要提供自定义脱水字段,因为bundle.obj.results已经是数据库中的反序列化对象。

不是提供自定义dehydrate_results功能,只需将results字段类型指定为tastypie.fields.DictFieldtastypie.fields.ListField,具体取决于您提供的数据存储

例如

from tastypie.fields import ListField

class MyResource(ModelResource):
    results = ListField(attribute='results')

答案 1 :(得分:0)

字符串值只是编码为json,因此您需要在js:

中对其进行解码
JSON.parse("[{\"name\": \"Cash In\", \"result\": \"toto\"}]")

这将为您提供正确的对象列表。