1

この質問の仕方がわかりません。まず、私が持っTeamPlayerいるモデルについて説明します。

class team()
        name = models.CharField(max_length=100) // name quato something like this

class player(models.Model) 
        point = models.IntegerField()
        assist = models.IntegerField() 
        rebound = models.IntegerField() //something like this 
        team = models.ForeignKey(team)

Matchその試合にはモデルと選手 (ポイント、アシスト、リバウンド) が必要です。それを表すモデルを作成するにはどうすればよいですか?

4

2 に答える 2

2

これは仮定を単純化した演習/宿題ですか、それとも実際のアプリケーションをモデル化していますか? たとえば、プレイヤーは時間の経過とともにチームを変更する可能性があります。それをどのようにモデル化しますか? 簡単にするために、プレイヤーがチームを変更しないと仮定しましょう。私はあなたのケースを次のようにモデル化します:

class Team(models.Model):
    name = models.CharField(max_length=100)
    # other attributes that do not change over time

class Player(models.Model):
    name = models.CharField(max_length=100)
    team = models.ForeignKey(Team)
    # other attributes that do not change over time

class Match(models.Model):
    venue = models.CharField(max_length=100)
    date = models.DateField()
    # other non-redundant attributes

class PlayerMatch(models.Model):
    player = models.ForeignKey(Player)
    match = models.ForeignKey(Match)

    points = models.IntegerField()
    assists = models.IntegerField()
    rebounds = models.IntegerField()

ここで重要な点は、統計が にPlayerMatchのみ保持されることです。Playerinまたは inでそれらを繰り返す必要はありません。Matchそれは冗長です。代わりに、これらのデータ構造を考慮して、試合またはプレーヤーの統計を計算できます。

于 2013-03-05T12:49:34.550 に答える
1

私はします:

class StatisticsBase(models.Model):
    class Meta:
        abstract = True

    points = models.IntegerField()   # plural form reads easier here
    assists = models.IntegerField()  # at least in English
    rebounds = models.IntegerField()


class Player(StatisticsBase):
    name = models.CharField(max_length=100)


class Match(StatisticsBase):
    players = models.ManyToManyField(Player)  # you should capitalize class names
    # any additional fields
于 2013-03-05T12:22:46.997 に答える