【问题标题】:how can i make models unique in Django together我怎样才能使模型在 Django 中独一无二
【发布时间】:2018-06-17 14:57:36
【问题描述】:

我想要有 3 个模型 TvSeries、Season 和 Episode。 如果是特定的电视连续剧,则任何剧集都应仅适用于一个季节,并且该特定季节应仅适用于一个电视连续剧 我正在这样定义我的模型

class Movie(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(unique=True)


class Season(models.Model):
    season = models.PositiveIntegerField()
    title = models.CharField(max_length=255, blank=True)
    movie = models.ForeignKey(Movie,on_delete=models.CASCADE)

class Episode(models.Model):
    episode = models.PositiveIntegerField()
    title = models.CharField(max_length=255, blank=True)
    season = models.ForeignKey(Season,on_delete=models.CASCADE)
    movie = models.ForeignKey(Movie,on_delete=models.CASCADE)

但在这种情况下,任何季节都可以适用于任何情节,我制作的每一集我都可以选择一个季节和一个完全不同的电视连续剧,如下所示:

testfilm1 -> season1(id=1) -> episode 1
testfilm2-> season(id=1) -> episode 2

testfilm1 的季节可以是任何其他电影的用户。 我用 unique_together 试过了,但没有机会。

【问题讨论】:

  • 一个赛季只能包含一个Movie,而一个Episode 只能包含一个Season,但是我不清楚为什么您添加了从EpisodeMovie 的链接,因为那通过Season 已经存在关系。

标签: django django-models


【解决方案1】:

testfilm1 的季节可以是任何其他电影中的用户。我用 unique_together 试过了,但没有机会。

不,您在Season 中添加了一个ForeignKeyMovie,这意味着每个Season 都链接到正好一个 @987654326 @(如果你加了null=True,它可以链接到no Movie

当然,如果我们按照相反的关系,这意味着Movie可以有一个更多@987654330 @s 附加到它,每个Season 可以有一个更多 Episodes 附加到它。但这似乎合乎逻辑。但是Episode 只能完全属于一个Season,而Season 只能属于一个Movie

然而,奇怪的是你定义了一个从EpisodeMovieForeignKey。这是没有意义的,因为电影只是沿着Season 的路径,然后到Movie。因此,您可能应该删除Episode 模型上的movie 属性。

如果您经常查询Episodemovie,我们可以定义一个属性,例如:

class Episode(models.Model):
    episode = models.PositiveIntegerField()
    title = models.CharField(max_length=255, blank=True)
    season = models.ForeignKey(Season,on_delete=models.CASCADE)

    @property
    def movie(self):
        return Movie.objects.get(season__episode=self)

因此,您描述的层次结构是不可能的。要么是:

testfilm 1 -> season 1 -> episode 1
testfilm 1 -> season 1 -> episode 2

或者是:

testfilm 1 -> season 1 -> episode 1
testfilm 2 -> season 2 -> episode 2

【讨论】:

  • 谢谢。我如何首先在 Django admin 中选择电影,然后显示该电影的季节?因为如果我想选择这样的东西很难找到的季节。
  • @Stick:通过创建自定义管理表单。
猜你喜欢
  • 2013-08-14
  • 1970-01-01
  • 2011-11-24
  • 2018-07-15
  • 1970-01-01
  • 2021-10-01
  • 2020-02-07
  • 1970-01-01
  • 2015-04-22
相关资源
最近更新 更多