有没有办法在django中控制json序列化?下面的简单代码将以json格式返回序列化对象:
co = Collection.objects.all()
c = serializers.serialize('json',co)
json将类似于:
^{pr2}$你可以看到它在以一种你可以重新创建整个模型的方式序列化它,你想在某个时候这样做吗-公平,但对简单的JS-ajax来说不是很方便:我想把流量降到最低,让整个事情变得更清晰。在
我所做的是创建一个将对象传递给.json模板的视图,该模板将执行以下操作以生成“更好”的json输出:
[
{% if collections %}
{% for c in collections %}
{"id": {{c.id}},"sortOrder": {{c.sortOrder}},"name": "{{c.name}}","urlName": "{{c.urlName}}"}{% if not forloop.last %},{% endif %}
{% endfor %}
{% endif %}
]
这确实有效,而且输出量很大(?)更好:
[
{
"id": 1,
"sortOrder": 0,
"name": "Город и архитектура",
"urlName": "architecture"
},
{
"id": 2,
"sortOrder": 1,
"name": "Природа",
"urlName": "nature"
},
{
"id": 3,
"sortOrder": 2,
"name": "Объекты и натюрморт",
"urlName": "objects"
}
]
但是,我的解决方案使用模板的速度太快了(这是处理过程中的一个额外步骤,可能会对性能产生影响),例如,如果要更新模型,则需要手动维护。在
我认为json生成应该是模型的一部分(如果我错了,请纠正我),并使用本机pythonjson和django实现来完成,但无法确定如何使它去掉我不想要的部分。在
还有一件事——即使我将它限制为一组要序列化的字段,它也会将id始终保持在元素容器之外,而将其作为“pk”显示在元素容器之外。在
那真的很简单。简单示例:
此视图将返回等效于以下JSON:
^{pr2}$编辑:是的,assaflavie是对的,你的模板可以抛出无效的JSON。在
我建议您使用the json library对数据进行编码,而不是自己构造类似json的字符串。首先,上面的代码似乎不能正确地处理转义。编写自己的序列化程序并没有什么好处(除了bug)。在
与其自己编写任何东西,不如让Piston将Django模型序列化为JSON。默认情况下,它只是序列化模型的字段,没有元数据。你可以很容易地列出要包括或排除哪些字段,甚至是相关字段。没有额外的模板,视图代码很少。在
相关问题 更多 >
编程相关推荐