python - 如何在 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
,我不能添加多个演员。
解决方案
您使用ManyToManyField
[Django-doc]来表示电影可以有多个MovieCast
s 并且 aMovieCast
可以属于多个Movie
s 的关系。
例如:
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)
有关详细信息,请参阅文档的多对多关系部分。
推荐阅读
- android - 如何下载代码的起始分支版本
- javascript - 重置 setInterval 会将其置于多循环间隔中
- memory-management - Win64、MacOS、Linux下如何获取虚拟地址空间和单独配置内存?
- integration - 为什么我的 NetSuite 创建操作不返回任何自定义字段?
- python - PythonKit 无法为 Swift 框架加载对象(适用于 Swift 应用程序)
- java - 项目编译为jar后停止工作
- python - 将代码升级到 tensorflow 2.0 时出现 *variable 语法错误
- sas - 行标签被截断
- dataframe - 如何从 Julia 的单列 DataFrame 中提取 column_name 字符串和数据向量?
- python - ThreadPoolExecutor(workers) 增加内存使用