0

私は、毎週の友人間のサッカーの試合用のジャンゴアプリを作成しようとしています。

Player というモデルと Game というモデルを用意し、Game には多くの Player を持たせる (そして所属させる) ことを計画しています。

しかし、週のある時点で、何人かのプレイヤーを 1 つのチームに割り当て、何人かを別のチームに割り当てたいと考えています。

ゲームに 2 つのチームを作成し、各チームに多くのプレイヤーを配置することでこれを実行できることがわかりますが、これは、ゲーム モデルでチームに複数回参加する各プレイヤーを使用していることを意味します。これは私にはあまり適切ではありません。

もちろん、各チームに参加できるプレイヤーの選択肢を、ゲームに登録したプレイヤーに制限したいと考えています。

同じゲーム オブジェクトで同じデータを 2 回使用しないように、これをモデル化する別の方法はありますか?

4

1 に答える 1

1

登録を追跡し、プレイヤーをチームに割り当てる必要があるため、他に方法はありません。実際にそれをスクラッチします。

中間 (GamePlayerMembership) インスタンスの存在は、プレイヤーがゲームに登録しているかどうかを示すことができます。だから私の見解はこれです:

from django.db import models

class Player(models.Model):
    name = models.CharField()

class Game(models.Model):
    starts_when = models.DatetimeField()
    players = models.ManyToManyField(Player, through='GamePlayerMembership', related_name='games_played')

    def register(self, player):
        return GamePlayerMembership.objects.create(game=self, player=player)

    def assign(self, player, team):
        try:
            memb = GamePlayerMembership.objects.get(game=self, player=player)
            memb.team = team
            memb.save()
        except GamePlayerMembership.DoesNotExist:
            raise Exception('Player has not registered for the game')

class GamePlayerMembership(models.Model):
    TEAMS = (
        ('home', 'Home'),
        ('guest', 'Guest')
    )
    game = models.ForeignKey(Game)
    player = models.ForeignKey(Player)
    team = models.CharField(max_length=5, choices=TEAMS, null=True, blank=True)

    class Meta:
        unique_together = ('game', 'player')
于 2012-09-19T19:32:59.963 に答える