モデルをシリアライズしたいのですが、シリアライズするモデル インスタンスでデータベース ルックアップを実行する必要があるフィールドを追加したいと考えています。
class FooSerializer(serializers.ModelSerializer):
my_field = ... # result of some database queries on the input Foo object
class Meta:
model = Foo
fields = ('id', 'name', 'myfield')
これを行う正しい方法は何ですか?追加の「コンテキスト」をシリアライザーに渡すことができることがわかりました。追加のフィールドをコンテキスト辞書に渡すのが正しい答えですか?
そのアプローチでは、必要なフィールドを取得するロジックは、シリアライザーの定義で自己完結することはありません。これは、シリアル化されたすべてのインスタンスがmy_field
. DRFシリアライザーのドキュメントの他の場所では、「追加のフィールドは、モデルの任意のプロパティまたは呼び出し可能に対応できます」と書かれています。私が話しているのは「追加フィールド」ですか?
Foo
のモデル定義で値を返す関数を定義my_field
し、シリアライザーで my_field をその callable に接続する必要がありますか? それはどのように見えますか?
必要に応じて質問を明確にしてください。