結論
self.object
で取得できます。また、UpdateViewに限らず、DetailViewなどのモデルデータを取得するものであれば使えそうです。
サンプルコード
views.py
class RecordUpdateView(UpdateView):
"""
ビュー:更新画面
"""
model = Record
# ...
# テンプレートに辞書データを渡す
def get_context_data(self, *, object_list=None, **kwargs):
"""
表示データの設定
"""
# recordのプライマリーキーを取得する
# モデルデータはself.objectで取得可能
record = self.object
kwargs['pk'] = record.pk
return super().get_context_data(object_list=object_list, **kwargs)
# ...
自身が起こした勘違い
この記事を投稿する前、self.model
で取得できると勘違いしていました。下記のようなコードです。
views.py
class RecordUpdateView(UpdateView):
"""
ビュー:更新画面
"""
model = Record
# ...
# テンプレートに辞書データを渡す
def get_context_data(self, *, object_list=None, **kwargs):
"""
表示データの設定
"""
# recordのプライマリーキーを取得する
# モデルデータはself.modelで取得できると勘違い
# <class 'django.db.models.base.ModelBase'>の型の変数になってしまい、取得したいモデルデータではない
record = self.model
# 意図しない値やエラーが発生する。
kwargs['pk'] = record.pk
return super().get_context_data(object_list=object_list, **kwargs)
# ...
self.model
だと想定と違う変数になり、結果として意図しない値やエラーが発生します。注意です。
以上です。