我是Django的新手,我对模型和外键有疑问。
我有两个模型:电影院和电影院。 一个电影院可以包含多部电影,因此我在电影模型中放置了电影院的外键。
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),但我不确定
答案 0 :(得分:2)
对于给定的Cinema
,您可以使用:
some_cinema.movie_set.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
related_name='movies'
)
然后您可以使用以下查询:
some_cinema.movies.all()
另一种方法是根据ForeignKey
进行过滤,例如:
Movie.objects.filter(posting_cinema=some_cinema)
或者如果您具有电影院的主键:
Movie.objects.filter(posting_cinema__pk=some_cinema_pk)
((例如,如果您从未真正需要Cinema
本身,则可以保存对Cinema
对象的获取)。