我正在为一款游戏设计一个基于Django的网络界面,该游戏既可以单人玩,也可以团队玩。游戏是以分数为基础的;达到设定点数的第一方获胜。对于以后的统计和显示,点具有时间戳
我的问题是:如何在一个Game
中有两个Player
或两个Team
?我的模特现在看起来像这样:
from django.db import models
# Create your models here.
class Player(models.Model):
slug = models.SlugField(unique=True) # will be autogenerated when inserting new Instance
name = models.CharField(max_length=100)
wins = models.IntegerField()
losses = models.IntegerField()
picture = models.ImageField(upload_to='images/player_pics')
# games_played = wins + losses
def __str__(self):
return self.name
class Team(models.Model):
slug = models.SlugField(unique=True)
name = models.CharField(max_length=100)
players = models.ManyToManyField(Player)
wins = models.IntegerField() # from here on seems redundant to Player class
losses = models.IntegerField()
picture = models.ImageField(upload_to='images/team_pics')
# games_played = wins + losses
def __str__(self):
return self.name
class Point(models.Model):
val = models.IntegerField()
timestamp = models.DateTimeField()
class Game(models.Model):
slug = models.SlugField(unique=True)
timestamp = models.DateTimeField()
players = models.ManyToManyField(Player) # here should be either Team or Player
points = models.ManyToManyField(Point)
我的想法是实现另一个类,如GameParty
,它可以是Player
或Team
,但同样的问题也适用于那里。像赢和输这样的冗余领域也是我不喜欢的
期待您的反馈
您不需要硬编码赢、输和玩的游戏,因为您可以获得这些值使用外键和多对多关系进行查询(也可以在模型中创建动态属性以返回查询以避免重复)。更改您的型号:
例如,要获取玩家玩的游戏,可以编写以下查询:
或者使用动态属性(此属性不会插入数据库中,但会在每次调用时对其进行计算,因此不需要更新):
要编写查询,请从documentation引用。如果您还想将团队与游戏关联,可以创建一个附加表或使用generic relation
相关问题 更多 >
编程相关推荐