我是 Django 的新手,我有一个关于模型和外键的问题。
我有两个模型:Cinema 和 Movie。 一个Cinema可以有多部电影,所以我把cinema这个外键放在了Movie模型中。
class Cinema(models.Model):
name = models.CharField(max_length=255)
address = models.CharField(max_length=255)
class Movie(models.Model):
title = models.CharField(max_length=255)
description = models.CharField(max_length=255)
posting_cinema = models.ForeignKey('cinemas.Cinema', on_delete=models.CASCADE, null=True)
现在我想列出特定电影院的所有电影。 我该怎么做?
思路如下: 用户点击电影院,它会打开一个包含电影院详细信息和“看电影”按钮的页面。如果用户单击此按钮,将打开一个新页面,我想在那里列出该特定电影院的电影。
我试图找出一些解决方案,但遗憾的是我被困住了。我在考虑 Movie.objects.filter(#something) 但我不确定
请您参考如下方法:
对于给定的 Cinema,您可以使用:
some_cinema<b>.movie_set</b>.all()
或者你可以给ForeignKey一个更有意义的名字来反向查询:
class Movie(models.Model):
title = models.CharField(max_length=255)
description = models.CharField(max_length=255)
posting_cinema = models.ForeignKey(
'cinemas.Cinema',
on_delete=models.CASCADE,
null=True,
# here we give the reverse relation a name
<b>related_name='movies'</b>
)
然后你可以查询这个:
some_cinema<b>.movies</b>.all()
另一种方法是根据ForeignKey 进行过滤,例如:
Movie.objects.filter(<b>posting_cinema=some_cinema</b>)
或者如果你有电影院的主键:
Movie.objects.filter(<b>posting_cinema__pk=some_cinema_pk</b>)
(例如,如果您真的不需要 Cinema 本身,这可以保存对 Cinema 对象的提取)。
