シーズンのエピソード番号を一意にするには、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()
私はあなたのエピソードの数がseason.number_of_episodes未満でなければならないことを強制するためにDjangoのモデルを使用することができるとは思わないが、あなたはオーバーライドされた保存法でそれを行うことができます。
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.
エピソード番号が間違っている場合、これはセーブ方法から飛び出すだけです。あなたはたぶん例外を発生させるでしょう。
あなたにたくさんありがとう:) – Nicpon
これは正常に動作しますが、私はエピソードに別のフィールドを追加したい:私はときに私はエピソードを追加しようとする 俳優= models.manyToManyField(俳優) は、残念ながら、それは例外が発生します多すぎると:多対多の関係が使用される前に、「「エピソード」インスタンスは主キー値を持つ必要があります。」 なぜそれが何であり、私は何ができるのですか? – Nicpon
最初にオブジェクトにsaveを呼び出し、それにアクターを追加することがあります。エピソード番号が高すぎるエピソードを追加すると、モデルは保存されません(上記のコードを使用した場合)、そのエラーメッセージが表示されます。これは、ManyToManyフィールドにプライマリキーを持つオブジェクトが必要で、オブジェクトが初めて保存されたときにプライマリキーを取得するためです。エピソード番号が高すぎる場合は修復する必要があります。たとえば、例外をスローして(返すのではなく)どこかで処理することができます。 –