我不确定如何提出这个问题?首先让我解释一下我有Team
和Player
模型。
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
模型和球员(得分,助攻,反弹)来进行那场比赛;如何创建一个模型来表示它?
答案 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
中。您无需在Player
或Match
中重复这些内容,即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