0
ユーザープロファイルモデルで設定された言語に基づいて翻訳言語を設定するためのミックスインを作成しようとしています。 getリクエストが来たら、mixinは言語をユーザ言語に設定し、mixinを追加するビューから応答を得て、それまでの言語に戻します。私は呼び出された次のmixinを書きましたが、getメソッドは呼び出されません。私は間違って何をしていますか?あなたがsuper()
を呼び出さない限り、あなたのミックスインのget()
メソッドが呼び出されることはありませんあなたのSomeView
上書きget()
、もしDjangoクラスベースのビューでgetメソッドの動作を変更するためのMixin
class SetUserLanguageMixin(object):
def get(self, request):
current_language = translation.get_language()
try:
translation.activate(request.user.profile.language)
response = super(SetUserLanguageMixin, self).get(request)
finally:
translation.activate(current_language)
return response
class SomeView(LoggingMixin, APIView, SetUserLanguageMixin):
def get(self, request):
...
return Response(data, status=status.HTTP_200_OK)
。私はgetメソッドを "ラップする"必要があります(前と後のいくつかのアクションを行う)。この場合、ディスパッチを無効にすることがうまくいかないかどうかはわかりません。 – foobar
['dispatch'](https://docs.djangoproject.com/en/1.11/ref/class-based-views/base/#django.views.generic.base.View.dispatch)をオーバーライドすると同じ効果が得られるはずです。 'response = super(SetUserLanguageMixin、self).get(request)'を呼び出すと、ディスパッチのデフォルトの実装は、 'HTTP'メソッドに基づいてメソッドを呼び出すことです。つまり、GETリクエストの場合は' get() 'です。 – Alasdair
ありがとうございます。私はAPIViewの前に置くとすぐにディスパッチを呼び出すようです。 rest_framework.views.APIViewにもディスパッチメソッドがあるため、競合が発生しています。 – foobar