django モデルを json 形式にシリアライズする必要があるため、(リストの最適化のために) フル バージョンとショート バージョンのカスタム メソッドを作成しました。
class Article(models.Model):
def serialize_full(self):
return {
'title': self.title,
'absolute_url': self.get_absolute_url(),
'content': self.content,
... # many heavy fields
}
def serialize_short(self):
return {
'title': self.title,
'absolute_url': self.get_absolute_url(),
}
次に、デフォルトのエンコーダーを再定義しました
class JSONEncoder(DjangoJSONEncoder):
def default(self, obj):
if isinstance(obj, QuerySet):
return [o.serialize_short() for o in obj]
if isinstance(obj, models.Model):
return obj.serialize_full()
return super(JSONEncoder, self).default(obj)
*主なアイデアを示すために、これは私のコードの短いバージョンです。
しかし、この方法では、シリアライゼーションを再定義することはできませんlist
(Pythonjson
モジュールでハードコードされています)。現在の記事は、私が望む方法ではなく、list
で連載されています。serialize_full
serialize_short