まず最初に、私はこのコーディングには全く新しいことを認めなければなりませんが、適切な解決策を見つけることができず、コードを学ぶことがおそらく最良の方法です。Django - 適合する中間m2mモデルを構築するにはどうすればいいですか? /ベストプラクティス
とにかく、私は別のタイトル所有者、選手権とそのようなものを表示するためのアプリを構築しようとしています。 Djangoのドキュメントを読んだ後、私は中間モデルをより良い方法として使う必要があることを理解しました。私の古いmodels.pyは、次のようになります。
class Person(models.Model):
first_name = models.CharField(max_length=64)
last_name = models.CharField(max_length=64)
[...]
class Team(models.Model):
name = models.CharField(max_length=64)
team_member_one = models.ForeignKey(Person)
team_member_two = models.ForeignKey(Person)
class Championship(models.Model):
name = models.CharField(max_length=128)
status = models.BooleanField(default=True)
class Titleholder(models.Model):
championship = models.ForeignKey(Championship)
date_won = models.DateField(null=True,blank=True)
date_lost = models.DateField(null=True,blank=True)
titleholder_one = models.ForeignKey(Person,related_name='titleholder_one',null=True,blank=True)
titleholder_two = models.ForeignKey(Person,related_name='titleholder_two',null=True,blank=True)
選手権応じて、いずれかの個人またはチームが優勝することができ、それはシングルまたはチーム優勝だ場合、私は覇者クラスの外部キーに持っていた理由です。 Django documentationを見ると、これは間違っているようです。一方、初心者の私にとって、この例の中間モデルは、私のモデルにはまったく適合していないようです。
短いストーリー:モデルを正しい方法で構築する方法について、誰でも正しい方向に向けることができますか?注:これは単にモデルを構築してDjangoの管理者に表示する方法に関する単なる質問に過ぎませんが、今のところテンプレートを構築することについては言及していません。
大変お手伝いいたします。先輩に感謝します。
Djangoの 'ManyToManyField'は、中間テーブルを自動的に作成してクエリするための文法的な砂糖です。テーブルを明示的に作成した場合は、ここで並べ替えが行われているので、フィールドは必要ありません(まだ役立ちますが)。しかし、あなたが提示したスキーマにはいくつかの問題があります。誰もDjangoとは関係がありません.SQLデータベースのモデリングの問題です。もっと一般的な質問をすることをお勧めします(*私はこのデータをどうやってモデル化できますか?*)。 –