エピソード番号をシーズンで一意にするために、unique_togetherを使用できます。これは、一方のフィールドのすべての値に対して、もう一方のフィールドに値を持つ1つの行しか存在できないことを意味します。それはこれについて見るでしょう:
class Season(models.Model):
number_of_episodes = models.IntegerField()
class Episode(models.Model):
class Meta:
unique_together = (season, number)
season = models.ForeignKey(Season)
number = models.IntegerField()
djangoモデルを使用して、エピソード番号をseason.number_of_episodes未満にすることはできないと思いますが、オーバーライドされたsaveメソッドでそれを行うことができます。このようなもの:
class Season(models.Model):
number_of_episodes = models.IntegerField()
class Episode(models.Model):
class Meta:
unique_together = (season, number)
season = models.ForeignKey(Season)
number = models.IntegerField()
def save(self, *args, **kwargs):
if self.number > season.number_of_episodes:
return #Don't save
else:
super(Episode, self).save(*args, **kwargs) # Call the "real" save() method.
これは、エピソード番号が正しくない場合にのみ、saveメソッドからジャンプすることに注意してください。代わりに、おそらく例外を発生させます。