テンプレートファイルの中でリレーションしたモデルの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>