You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django的Movie类中存储多个ActorsAndDirectors对象?

问题解决:Django中实现Movie关联多个ActorsAndDirectors对象

当前你的Movie模型中cast字段使用ForeignKey,这是一对多关联关系,意味着一部电影只能关联一个演员/导演对象,所以API面板里只能插入一个。要实现多对象存储,你需要改用多对多关联字段ManyToManyField。

修改步骤:

  1. 更新模型字段
    将Movie类中的cast字段替换为ManyToManyField,代码如下:
class ActorsAndDirectors(models.Model):
    name = models.CharField(max_length=32, blank=False, null=False)
    surname = models.CharField(max_length=32, blank=False, null=False)
    role = models.CharField(max_length=11, blank=False, null=False)

    def __str__(self):
        return f"{self.name} {self.surname}"


class Movie(models.Model):
    title = models.CharField(max_length=50, blank=False, null=False, unique=True)
    description = models.TextField(max_length=400)
    # 替换ForeignKey为ManyToManyField,无需on_delete参数
    cast = models.ManyToManyField(ActorsAndDirectors)
    premiere = models.DateField()
    updated = models.DateTimeField()
    slug = models.SlugField()

    def number_of_ratings(self):
        return Rating.objects.filter(movie=self).count()
    
    def avg_rating(self):
        score = 0
        ratings = Rating.objects.filter(movie=self)
        for rating in ratings:
            score +=rating.stars
        if len(ratings) > 0:
            return score/len(ratings)
        else:
            return 0

    def __str__(self):
        return f"{self.title}, ({self.premiere})"
  1. 执行数据库迁移
    修改模型后,需要更新数据库结构:
    python manage.py makemigrations
    python manage.py migrate
    

效果说明:

修改完成后,在API面板(无论是Django Admin还是DRF的可视化界面)中,cast字段会变成可多选的控件,允许你为一部电影关联多个ActorsAndDirectors对象。

Django的ManyToManyField会自动创建中间表来维护电影与演员/导演的多对多关系,无需手动创建中间模型(如果不需要额外字段的话)。如果后续需要在关联中添加额外信息(比如演员的具体参演角色),可以自定义中间模型并通过through参数指定。

内容的提问来源于stack exchange,提问作者woodbine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:55:37