[解決済み] Django REST Framework: ModelSerializerに追加フィールドを追加する
2022-04-13 14:10:49
質問
モデルをシリアライズしたいのですが、シリアライズされるモデル・インスタンス上でいくつかのデータベース検索を行う必要がある追加フィールドを含めたいのですが、どうすればいいですか?
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シリアライザーのドキュメントの他の箇所では、次のように記述されています。
とは
"エクストラフィールドは、モデル上の任意のプロパティまたはcallableに対応することができます". 私が言っているのは、"extra fields"のことでしょうか?
に関数を定義する必要があります。
Foo
を返すモデル定義
my_field
の値で、シリアライザーで my_field をその callable にフックするのですか?それはどのようなものでしょうか?
必要であれば、質問を明確にすることをうれしく思います。
解決方法は?
私が思うに
SerializerMethodField
は、あなたが探しているものです。
class FooSerializer(serializers.ModelSerializer):
my_field = serializers.SerializerMethodField('is_named_bar')
def is_named_bar(self, foo):
return foo.name == "bar"
class Meta:
model = Foo
fields = ('id', 'name', 'my_field')
http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield
関連
-
ImproperlyConfiguredです。DEFAULT_INDEX_TABLESPACE の設定を要求されましたが、設定されていません。
-
[解決済み] Django のカスタムフィールドで User モデルを拡張する
-
[解決済み] RuntimeWarning: DateTimeFieldがナイーブなdatetimeを受信した
-
[解決済み] Django REST フレームワーク: 非モデルシリアライザー
-
[解決済み] Django ManyToMany filter()
-
[解決済み] Django は静的ファイルの URL をビューで取得します。
-
[解決済み] Djangoのvalues()の項目名を変更する方法は?
-
[解決済み] DjangoのRest Frameworkはcsrfを削除します。
-
[解決済み] django テンプレートで "ブロック" を繰り返す方法
-
[解決済み] Django の DoesNotExist 例外はどのようにインポートしますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Djangoは、フォームを送信するときに403エラーに遭遇しました。CSRF 検証に失敗しました。
-
Django。"makemigrations "時に変更が検出されない。
-
[解決済み] プロパティとゲッターとセッターの使い分け
-
[解決済み] Django のビューで 2 つ以上のクエリセットを結合するにはどうすればよいですか?
-
[解決済み] Djangoです。文字列からモデルを取得する?
-
[解決済み] django で複数のオブジェクトを削除する
-
[解決済み] egg_infoエラーでpipからインストールできない
-
[解決済み] Django モデルで外部キーフィールドをオプションにすることはできますか?
-
[解決済み] django-tastypie と djangorestframework の違いは何ですか?[クローズド]
-
[解決済み] Djangoテンプレートでネストされたforループで一番外側のforloop.counterにアクセスする方法は?