Skip to main content
 首页 » 编程设计

python之Tastypie 和 JSON Field 序列化问题

2025年05月04日13lyhabc

所以我看了下面的帖子也没有找到答案:

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

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

在 python shell 中,我可以打印这个字段并呈现以下内容:

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

我修改 dehydrate 方法以删除 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"}] 

谢谢。

请您参考如下方法:

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

无需提供自定义 dehydrate_results 函数,只需将 results 字段类型指定为 tastypie.fields.DictField 或 tastypie.fields.ListField 取决于您存储的数据。

例如。

from tastypie.fields import ListField 
 
class MyResource(ModelResource): 
    results = ListField(attribute='results')