モデルをシリアル化したいが、シリアル化するモデルインスタンスでいくつかのデータベースルックアップを実行する必要がある追加のフィールドを含めたい:
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をその呼び出し可能オブジェクトにフックする必要がありますか?それはどのように見えますか?
よろしくお願いします。必要に応じて、質問を明確にします。