首页 > 解决方案 > 如何在 Django 中为电影模型添加多个演员?

问题描述

我正在用 Django 制作电影应用程序。我有一个Movie以其通常属性命名的模型。我想创建另一个名为 Cast 的模型,我将在其中创建不同的演员。对于给定的电影,我希望能够链接不同的演员,并且在删除电影时不应该删除演员。我尝试在电影模型的演员字段中使用 ForeignKey 进行演员阵容。因此它看起来像这样:

class MovieCast(models.Model):
    """
    Model for the actors in a movie
    """
    actor_name = models.CharField(max_length=100)

class Movie(models.Model):
    """
    Base class for the properties our movie will have
    """
    **other items**
    cast = models.ForeignKey(MovieCast, on_delete=models.PROTECT)

问题是模型确实出现在管理站点中,我可以向MovieCast模型添加一个演员,但在模型cast领域Movie,我不能添加多个演员。

标签: pythondjango

解决方案


您使用ManyToManyField[Django-doc]来表示电影可以有多个MovieCasts 并且 aMovieCast可以属于多个Movies 的关系。

例如:

class MovieCast(models.Model):
    actor_name = models.CharField(max_length=100)

class Movie(models.Model):
    name = models.CharField(max_length=128)
    cast = models.ManyToManyField(
        MovieCast,
        related_name='movies'
    )

然后我们可以构造例如两部电影和两个MovieCast对象:

titanic = Movie.objects.create(name='Titanic')
laborday = Movie.objects.create(name='Labor Day')

leonardo = MovieCast.objects.create(actor_name='Leonardo DiCaprio')
kate = MovieCast.objects.create(actor_name='Kate Winslet')

titanic.cast.add(leonardo, kate)
laborday.cast.add(kate)

有关详细信息,请参阅文档的多对多关系部分


推荐阅读