我想拥有3款TvSeries,Season和Episode。 如果特定的TvSeries,任何剧集应该仅适用于一个季节,并且该特定季节应仅适用于一个TvSeries 我正在定义我的模型
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)
但是在这种情况下,任何季节都可以用于任何一集,每一集我都可以选择一个季节和一个完全不同的TvSeries这样:
testfilm1 -> season1(id=1) -> episode 1
testfilm2-> season(id=1) -> episode 2
testfilm1的季节可以是任何其他电影中的用户。 我尝试使用unique_together但没有机会。
答案 0 :(得分:0)
testfilm1
的季节可以是任何其他电影中的用户。我尝试使用unique_together但没有机会。
不,您已在ForeignKey
中向Season
添加了Movie
,这意味着每个Season
都与相关联正好一个 Movie
(如果您添加null=True
,则可以将其链接到否 Movie
。
当然,如果我们反过来关注关系,则意味着Movie
可以零,一个或更多 Season
附加了Season
,每个Episode
可以零,一个或更多 {{1}附在它上面。但这似乎合乎逻辑。但Episode
只能属于完全一个Season
而Season
只能属于一个 Movie
。
但奇怪的是,您从ForeignKey
到Episode
定义了Movie
。这没有任何意义,因为电影只是遵循Season
然后到Movie
的路径。因此,您可能删除 movie
模型上的Episode
属性。
如果您经常查询movie
的{{1}},我们可以定义一个属性,例如:
Episode
因此,您描述的层次是不可能的。它是:
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