カスタムシリアライゼーションが非常に速く必要で、私のケースではデシリアライゼーションが必要ない場合は、リスト/クエリセット/オブジェクトから必要なフォーマットを作成できるdjangoテンプレートを作成するだけです. その後、適切なコンテキストで render_to_string を呼び出すことができ、データをシリアル化できます。
更新: いくつかの短い例
datatables.net pluginで受け入れられる json 形式を取得したいとします。いくつかの特別なパラメーターが必要なため、simplejson または sth を使用してクエリセットをシリアル化することは、ここでは不可能です (または、少なくともそれほど簡単ではない可能性があります)。このような構造を提供する最速の方法は、次のような単純なテンプレートを作成することであることがわかりました。
{
"sEcho": {{sEcho}},
"iTotalRecords": {{iTotalRecords}},
"iTotalDisplayRecords": {{iTotalDisplayRecords}},
"aaData":[
{% for obj in querySet %}
[
"{{obj.name}}",
"{{obj.message|truncatewords:20}}",
"<a href=\"{% url some_view obj.id %}\">{{obj.name}}</a>"
]
{% if not forloop.last %}
,
{% endif %}
{% endfor %}
]
}
これは、探していた美しい json にレンダリングされます。また、フォーマットを完全に制御できます。その他の利点は、組み込みの django フィルターを使用してオブジェクト フィールドを変更できることです。
これは書籍で説明されているシリアル化ではないことはわかっていますが、オブジェクトをカスタム形式に変換したい場合は、このソリューションが最速のソリューションになる可能性があります。何らかの理由で、django 開発者はテンプレートを html だけでなく任意の形式にレンダリングすることを許可されているので、それを使用しないのはなぜですか?
上記の例は非常に具体的ですが、他の形式を生成することもできます。もちろん、この形式からオブジェクトを復元できるデシリアライザーを作成するのは面倒かもしれませんが、それが必要ない場合は...