1

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_fullserialize_short

4

0 に答える 0