我该如何为团队,玩家和匹配对象设计我的django模型?

时间:2013-03-05 11:53:26

标签: python django

我不确定如何提出这个问题?首先让我解释一下我有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模型和球员(得分,助攻,反弹)来进行那场比赛;如何创建一个模型来表示它?

2 个答案:

答案 0 :(得分: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中。您无需在PlayerMatch中重复这些内容,即redundant。相反,可以根据这些数据结构计算匹配或玩家的统计数据。

答案 1 :(得分: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