【Django】中間テーブルに紐付けの情報があった場合、対応する別モデルのレコードを詳細ページに表示したい

実現したいこと

前提

・DBは従業員情報モデル、案件情報モデル、中間テーブルの3つ
・従業員情報モデルと案件情報モデルにはそれぞれに固有のUUIDが発行されている
・従業員情報の詳細ページを表示した際に、従業員側の固有IDが中間テーブルに存在する場合、紐づけられた案件側のUUIDを基に案件情報を一覧として表示したい

発生している問題・エラーメッセージ

案件情報が表示されない

該当のソースコード

models.py

1import uuid 2from django.db import models 3from django.contrib.auth.models import User 4 5 6# 従業員情報 7class EmployeeInformation(models.Model): 8 ~省略~ 9 # 経歴(結合用ID) 10 careerList = models.UUIDField(default=uuid.uuid4, editable=False) 11 12# 案件情報 13class ProjectInformation(models.Model): 14 # 案件識別ID 15 projectId = models.UUIDField(default=uuid.uuid4, editable=False) 16 ~省略~ 17 18# 登録情報紐付けテーブル 19class InformationUniteTable(models.Model): 20 # 従業員側targetId 21 empTargetId = models.UUIDField() 22 # 案件側targetId 23 proTargetId = models.UUIDField() 24 25 # 関係情報返却 26 def get_related_projects(cls, emp_target_id): 27 pro_target_ids = cls.objects.filter(empTargetId=emp_target_id).values_list( 28 "proTargetId", flat=True 29 ) 30 return ProjectInformation.objects.filter(projectId__in=pro_target_ids)

views.py

1class EmployeeInfo(DetailView): 2 model = EmployeeInformation 3 context_object_name = "employeeDetail" 4 5 def get_context_data(self, **kwargs): 6 context = super().get_context_data(**kwargs) 7 from_page = self.request.GET.get("fromPage") 8 project_pk = self.request.GET.get("project_pk") 9 context["from_page"] = from_page 10 # 案件ページ以外から飛ぶ際はExceptが発生→空で送って処理 11 try: 12 context["projectDetail"] = ProjectInformation.objects.get(pk=project_pk) 13 except ProjectInformation.DoesNotExist: 14 context["projectDetail"] = None 15 16 # エンジニアと関連する案件情報を取得 17 career_id = self.object.careerList 18 related_projects = InformationUniteTable.get_related_projects( 19 InformationUniteTable, career_id 20 ) 21 context["related_projects"] = related_projects 22 23 return context

detail.html

12<div> 3 {% if related_projects %} 4 <h2>関連する案件情報</h2> 5 <ul> 6 {% for project in related_projects %} 7 <li><a href="{% url 'proInfo' project.projectId %}">{{ project.projectSummary }}</a></li> 8 {% endfor %} 9 </ul> 10 {% endif %} 11 </div> 12

試したこと

django関係の参考サイト、ドキュメントの確認

補足情報(FW/ツールのバージョンなど)

Python:3.11.4
Django:4.2.2
VScode:1.79.2

コメントを投稿

0 コメント