有沒有一種方法來控制Django中的json序列化?簡單的代碼下面將JSON返回序列化對象:django:控制json序列化
co = Collection.objects.all()
c = serializers.serialize('json',co)
的JSON將類似於此:
[
{
"pk": 1,
"model": "picviewer.collection",
"fields": {
"urlName": "architecture",
"name": "\u0413\u043e\u0440\u043e\u0434 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430",
"sortOrder": 0
}
},
{
"pk": 2,
"model": "picviewer.collection",
"fields": {
"urlName": "nature",
"name": "\u041f\u0440\u0438\u0440\u043e\u0434\u0430",
"sortOrder": 1
}
},
{
"pk": 3,
"model": "picviewer.collection",
"fields": {
"urlName": "objects",
"name": "\u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043d\u0430\u0442\u044e\u0440\u043c\u043e\u0440\u0442",
"sortOrder": 2
}
}
]
你可以看到它的序列化它的方式,你可以重新創建整個模型,你想在某個時候做到這一點 - 公平的,但對我的情況下,簡單的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生成應該是模型的一部分(糾正我,如果我錯了),並與原生python-json和django實現,但無法計算如何使它剝離位不想要。
還有一件事 - 即使當我將其限制爲一組字段進行序列化時,它也會將id始終保留在元素容器之外,並將其作爲「pk」出現在元素容器之外。
這適用於數組,但我不認爲Django模式可以通過這種方式進行序列化。 – abolotnov 2011-02-27 20:16:03
我認爲他暗示你應該將模型對象中的字段複製到JSON序列化類型,如列表或字典中。 'obj = Collection.objects.get(pk = 1); simplejson.dumps(dict(urlName = obj.urlName,name = obj.name,sortOrder = obj.sortOder)'。但就像在[別人的回答](http://stackoverflow.com/questions/5129794/django- control-json-serialization/5130423#5130423),活塞可以爲你做這一步:) – Bluu 2011-02-28 00:12:42
這或多或少地適用於某些手動預處理 - 某些模型字段不能由simplejson序列化,我必須將它們轉換到字符串:( – abolotnov 2011-03-02 19:12:04