完全なフィールド保持を使用して Django モデル オブジェクトを辞書に変換する
Django モデル オブジェクトを操作する場合、多くの場合、オブジェクトを辞書に変換する必要があります。データの操作やシリアル化を容易にするため。ただし、「編集不可」とマークされた外部キーや値を含むすべてのフィールドを保持しながらこれを達成するのは困難な場合があります。
既存のアプローチの制限
いくつかの共通点モデル オブジェクトを辞書に変換するメソッドは、さまざまな点で不十分です。
カスタム ソリューション
これらの制限に対処するために、カスタム関数を実装できます。
from itertools import chain def to_dict(instance): opts = instance._meta data = {} for f in chain(opts.concrete_fields, opts.private_fields): data[f.name] = f.value_from_object(instance) for f in opts.many_to_many: data[f.name] = [i.id for i in f.value_from_object(instance)] return data
この関数は、「編集不可」としてマークされたフィールドを含むすべてのフィールドの値を取得します。外部キーは ID に変換され、多対多の関係が保持されます。
使用例
instance = SomeModel(...) result_dict = to_dict(instance)
出力:
{'auto_now_add': ..., 'foreign_key': ..., 'id': ..., 'many_to_many': [...], 'normal_value': ..., 'readonly_value': ...}
追加の機能強化: モデル印刷の強化
デバッグとデータの可視性を向上させるために、印刷可能なモデル クラスを定義できます。
from django.db import models from itertools import chain class PrintableModel(models.Model): def __repr__(self): return str(self.to_dict()) def to_dict(instance): # Same implementation as the custom to_dict function ... class Meta: abstract = True
サブクラス化PrintableModel のモデルは、 repr() を呼び出すときの to_dict 関数の結果と同様の圧縮表現を提供します。
以上がDjango モデル オブジェクトを完全なフィールド保持を持つ辞書に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。