我已阅读文档并查看了此处发布的其他问题,但我无法找到或弄清楚这是否可以在Django中使用。
我有一个关于演员和电影的模型:
class Role(models.Model):
title_id = models.CharField('Title ID', max_length=20, db_index=True)
name_id = models.CharField('Name ID', max_length=20, db_index=True)
role = models.CharField('Role', max_length=300, default='?')
这是一个包含演员和电影对的单个表,所以给定一部电影(title_id),该电影中的每个演员都有一行。类似地,给定一个actor(name_id),演员所在的每部电影都有一行。
我需要执行一个查询,以返回由公共actor与给定title_id相关的所有title_id的列表。此查询的SQL如下所示:
SELECT DISTINCT r2.title_id
FROM role as r1, role as r2
WHERE r1.name_id = r2.name_id
AND r1.title_id != r2.title_id
AND r1.title_id = <given title_id>
这样的事情可以在单个Django ORM查询中表达,还是我被迫使用两个查询和一些干预代码? (或原始SQL?)
答案 0 :(得分:1)
通常情况下,我会将其分解为Actor和Movie表格,以便于查询,但您的要求就在那里,所以我会试一试
def get_related_titles(title_id)
all_actors = Role.objects.filter(title_id=title_id).values_list('pk', flat=True)
return Role.objects.filter(pk__in=all_actors).exclude(title_id=title_id) # maybe u need .distinct() here
这应该给你一个查询,以这种方式验证:
print(get_related_titles(some_title_id).query)