2

私はDjangoを初めて使用しますが、次の問題に対処する方法がわかりません。

私はモデルを持っています:

class Season(models.Model):
    number_of_episodes = models.IntegerField()
class Episode(models.Model):
    season = models.ForeignKey(Season)
    number = models.IntegerField()

エピソード番号は、シーズン内で一意であるだけでなく、シーズンのnumber_of_episodesよりも小さくする必要があります。

4

1 に答える 1

2

エピソード番号をシーズンで一意にするために、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メソッドからジャンプすることに注意してください。代わりに、おそらく例外を発生させます。

于 2012-05-12T21:39:12.757 に答える