[解決済み] Django Rest Framework の Viewset からシリアライザーにリクエストコンテキストを渡す。
2023-02-18 01:22:43
質問
シリアライザーのフィールドの値が、現在ログインしているユーザーのIDに依存するケースがあります。 シリアライザーを初期化する際にユーザーをコンテキストに追加する方法を見たことがありますが、ViewSetを使用する場合、シリアライザークラスのみを提供し、実際のシリアライザーインスタンスを提供しないため、これを行う方法がよくわかりません。
基本的には、どのようにしたらいいのか知りたいです。
class myModelViewSet(ModelViewSet):
queryset = myModel.objects.all()
permission_classes = [DjangoModelPermissions]
serializer_class = myModelSerializer
になります。
class myModelSerializer(serializers.ModelSerializer):
uploaded_by = serializers.SerializerMethodField()
special_field = serializers.SerializerMethodField()
class Meta:
model = myModel
def get_special_field(self, obj):
if self.context['request'].user.has_perm('something.add_something'):
return something
分かりにくかったらすみません、DOCからです。 追加コンテキストの追加 を実行するように書かれています。
serializer = AccountSerializer(account, context={'request': request})
serializer.data
しかし、シリアライザクラスを変更するだけで、シリアライザインスタンス自体を変更することはできないので、ビューセットから自動的に行う方法がよくわからないのですが、どうすればよいでしょうか?
どのように解決するのでしょうか?
GenericViewSet
には
get_serializer_context
メソッドがあり、このメソッドによって
context
:
class myModelViewSet(ModelViewSet):
queryset = myModel.objects.all()
permission_classes = [DjangoModelPermissions]
serializer_class = myModelSerializer
def get_serializer_context(self):
context = super(myModelViewSet, self).get_serializer_context()
context.update({"request": self.request})
return context
関連
-
6.5、Django - モデルでJSONFieldを使用してJSONフィールドでMySQLテーブルを作成する
-
[解決済み] 保存時に、フィールドが変更されたかどうかを確認するにはどうすればよいですか?
-
[解決済み] Django restフレームワーク、同じModelViewSetで異なるシリアライザーを使用する。
-
[解決済み] Django-Rest-Framework のシリアライザーで Request.User を取得する方法とは?
-
[解決済み] Django のモデルで電話番号を保存する最良の方法は何ですか?
-
[解決済み] Django REST フレームワーク: 非モデルシリアライザー
-
[解決済み] Django ORM のクエリセットに対応する SQL クエリを表示するには?
-
[解決済み] django のテンプレートで最初の文字を大文字にする
-
[解決済み] Django admin: データベースフィールドを持たないカスタム list_display フィールドの1つでソートする方法
-
[解決済み] 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 のクエリセット操作
-
[解決済み] NoReverseMatchエラーとは何ですか、またどのように修正しますか?
-
[解決済み] Django の管理者パスワードをリセットする方法は?
-
[解決済み] FastCGIとDjangoを使用しているnginxのエラーログはどこで見ることができますか?
-
[解決済み] シグナルハンドラは django プロジェクトのどこにあるべきですか?
-
[解決済み] Django でモデルのフィールドを取得する
-
[解決済み] Django: テンプレート内からセッション変数にアクセスする?
-
[解決済み] Djangoで複数のfilter()を連鎖させる、これはバグ?
-
[解決済み] Django: Django のアプリを完全にアンインストールするには?