Skip to main content
 首页 » 编程设计

python之列出特定电影院的所有电影之Foreign Key Django

2024年09月03日35xing901022

我是 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 对象的提取)。