前提・実現したいこと
Djangoを利用し、階層の異なるテーブルを作成しました。
select_relatedを利用し、Tag、Video、Projectをすべて取得したいのですがTagからProjectを結合できません。
複数select_relatedを記載し、データを加工しなければ不可能なのでしょうか?
実行したいSQL
SELECT * FROM Tag LEFT JOIN Video ON ( Tag.video = Video.id) LEFT JOIN Project ON ( Video.project = Project.id)
該当のソースコード
Python
1[models.py] 2class Project(models.Model): 3 title = models.CharField(max_length=100) 4 5class Video(models.Model): 6 project = models.ForeignKey(Project, on_delete=models.CASCADE) 7 video = models.FileField(upload_to=get_upload_to, null=True) 8 9class Tag(models.Model): 10 video = models.ForeignKey(Video, on_delete=models.CASCADE) 11 title = models.CharField(max_length=20)
Python
1class ProjectListView(ListView): 2 template_name = 'project/project_list.html' 3 model = Tag 4 5 def get_context_data(self, **kwargs): 6 test = Tag.objects.select_related('video', 'project') 7 return super(ProjectListView, self).get_context_data(**kwargs)
試したこと
Tag.objects.select_related('video').select_related('project')
Tag.objects.prefetch_related('video').prefetch_related('project')
Tag.objects.prefetch_related('video', 'project')
rawを実施するとSQLが直書きできるとの記事を見たので試してみたのですがやはりだめでした。
test = Tag.objects.raw(
'SELECT * FROM tag
LEFT JOIN video ON (tag.video_id = video )
LEFT JOIN project ON (video.project_id = project)'
)
エラー (1054, "Unknown column 'project' in 'on clause'")
バージョン
Python 3.7.9
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/12 01:11
2021/02/12 01:35
2021/02/12 02:19
2021/02/12 02:25