我应该如何为团队、玩家和比赛对象设计Django模型?

2024-09-30 18:16:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道怎么问这个问题?首先让我解释一下我有Team和{}模型。在

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模型和球员(分、助攻、篮板);我如何创建一个模型来表示它?在


Tags: name模型modelsthislengthmaxsomethingteam
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。相反,可以根据这些数据结构计算比赛或球员的统计数据。在

我会这样做:

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

相关问题 更多 >