序文: 私は django と db 設計は初めてです。
スーパー編集: いくつかの重要な変更を行ったので、変更前の回答はここにないものを参照している可能性があります。謝罪します。
コードに取り掛かります: models.py:
class Player(models.Model):
name = models.CharField()
class Team(models.Model):
name = models.CharField()
members = models.ManyToManyField(Player, through='Membership')
class Word(models.Model):
word = models.CharField(unique=True)
definition = models.CharField()
...
class Ownership(models.Model):
owner = models.ForeignKey(Player)
team = models.ForeignKey(Team)
word = models.ForeignKey(Word)
class Membership(models.Model):
team = models.ForeignKey(Team)
player = models.ForeignKey(Player)
Word テーブルが作成されました。admin で Player を作成します。次に、チームを作成してメンバーを追加します。管理者に所有権を追加しました。私は新しい所有権を作成し、選手、チーム、言葉から選ぶことができます。プレーヤーが特定のチームの単語を所有している場合、そのチームに属するプレーヤーはチーム内でその単語を所有できないという制約を付けたいと思います。彼らは他のチームでその言葉を所有しているかもしれません。
今のやり方。同じチームの 2 人の異なるプレイヤーが同じ単語を所有している可能性があります。悪い。基本的に、私は管理者に、このチーム内で所有されているすべての単語を取得し、ドロップダウンで利用可能にしないように言ってもらいたい.
この関係をどのようにモデル化できますか? 管理者でこの機能を取得するにはどうすればよいですか?
編集:別の問題を解決しようとしていることを示すために、メンバーシップ モデルを追加しました。そして、私が言ったように、これは私が実際に取り組んでいることの単純化された例です. ご覧のとおり、メンバーシップの関係が完了したので、別の所有権の問題を解決しようとしています。