ホームページ >バックエンド開発 >Python チュートリアル >Django モデル オブジェクトを、外部キーや `editable=False` フィールドを含むすべてのフィールドを含む辞書に変換するにはどうすればよいでしょうか?
Django モデル オブジェクトを、そのすべてのフィールドを含む辞書に変換するにはどうすればよいですか?フィールド (外部キーや editable=False としてマークされたフィールドを含む)
これを実現するには、いくつかの方法があります。
instance.__dict__
ただし、このアプローチには無関係な属性が含まれ、多対多の関係が含まれない可能性があります。
from django.forms.models import model_to_dict model_to_dict(instance)
このメソッドは多対多の関係をキャプチャしますが、編集不可能なフィールドは除外します。
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 や多対多の関係を含むすべてのフィールドを取得します。
from rest_framework import serializers class SomeModelSerializer(serializers.ModelSerializer): class Meta: model = SomeModel fields = "__all__" SomeModelSerializer(instance).data
モデル シリアライザーは包括的な表現を提供しますが、日時オブジェクトを常に正確に返すとは限りません。
コンソールでのモデル表現を拡張するには、基本モデル クラスを定義します。
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 code as in the Custom Function) class Meta: abstract = True
この基本モデルから継承して、デフォルトのモデル表現の代わりに辞書を自動的に印刷します。
以上がDjango モデル オブジェクトを、外部キーや `editable=False` フィールドを含むすべてのフィールドを含む辞書に変換するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。