やっちゃえPython

【Django必修スキル】templatesの中でリレーションしたpkの値を取得する方法

テンプレートファイルの中でリレーションしたモデルの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>
ABOUT ME
den
完全独学でWEBデザインを無謀にも挑戦している中年男。 工場勤務の会社員で3児の父。 チャレンジを忘れず、妻に怒られても心はおれず。 有益な情報を発信し、これを見ている人の為になればと思っています。
関連記事一覧