列出特定电影院的所有电影-外键Django

时间:2018-12-08 16:11:39

标签: python django

我是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),但我不确定

1 个答案:

答案 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对象的获取)。