StoryクラスとSeriesクラスの間の関係をモデル化したいと思います。 (つまり、小説の三部作) 関係は「1対多数」(一連のストーリーは多数含むことができますが、ストーリーは1つのシリーズのみに含めることができます)です。 モデルワイズこれは単にDjangoの一対多の外部関係におけるアソシエーション属性
part_of = models.ForeignKey(Series , on_delete=models.CASCADE , related_name='contains_story')
、ストーリー上の外部キーによって解決することができしかし、私はこの関係の属性としてのシーケンス番号をしたいと思います。 (1:長い地球、2:長い戦争、3:長い火星、...)。 私はそれをストーリーの属性にすることができますが、それはきれいではありません。シリーズの一部ではなく、ストーリー番号はシーケンス番号を持つべきではありません。
「多対多」では、「スルー」オプションを使用して解決できます。 クラスを指定し、そのクラスに属性を追加することによって、
part_of = models.ManyToManyField(Series, through='SeriesPart')
しかし、「シリーズの部」は「多対多」の関係ではなく、私はこのようにそれをモデル化し、コードでそれを制限することを避けるためにしたいので、どのように私がすべきこのベストを解決する?
私はあなたのユースケースについてはわかりませんが、外部キーのような音は方法ですが、なぜあなたは 'Story'にシリアル番号を付けたくないのか分かりません。 –
これはシリアル番号ではなく、シーケンス内の順序です。シーケンスの一部ではないストーリーは、その属性を持つべきではありません。 – Chabu