テンプレートファイルの中でリレーションしたモデルのpkを取得する方法を紹介します。
例えば、クラスベースビューのDetailViewなどで、データの詳細ページから、違うモデルの詳細ページに飛びたい際に、どのようにpkを取得すればよいか悩むことになるかと思います。
条件:二つのモデル「ABCModel」と「DEFModel」が存在しており、ForeignKeyでリレーションしています。
条件
models.py
class ABCModel(models.Model):
aaaa = jobtitle = models.CharField(
verbose_name='タイトル',
max_length=30,
)
class DEFModel(models.Model):
abc = models.ForeignKey(
ABCModel,
on_delete=models.CASCADE,
)
urls.py
app_name = 'APPNAME'
urlpatterns = [
path('abclist/<int:pk>/detail/', views.DetailAbcView.as_view(), name="detailpage"),
path('deflist/<int:pk>/detail/', views.DetailDefView.as_view(), name='detailotherpage'),
]
方法紹介
方法はとてもシンプルです。templateのhtmlファイル(仮にファイル名をdetailotherpage.html)に、以下の1行を追加することで、取得できます。
<a href="{% url 'APPNAME:detailpage' object.abc.pk %}" class="btn btn-primary">関連データへ</a>
