django - 球员-球队模型关系
问题描述
我正在建立一个数据库来显示在线游戏的比赛。我有三个问题;
第一个,我应该使用哪种方法
class Player(models.Model):
team=models.ForeignKey(Team,related_name='player',verbose_name='Team')
或者
class Team(models.Model):
player=models.ManyToManyField(Player)
第三; 我的球队和球员之间的表格看起来正确吗?最后的; 在这些表之后,我将在比赛和锦标赛之间制作表。比赛和球队应该是什么关系
class OnlineGame(models.Model):
game_name=models.CharField(max_length=120)
class Team(models.Model):
name=models.CharField(max_length=255,verbose_name="Takım ismi")
slug=models.SlugField(max_length=120,unique=True)
bio=models.TextField()
country=models.CharField(max_length=50)
logo=models.ImageField(null=True,blank=True,upload_to='team')
background=models.ImageField(null=True,blank=True,upload_to='team')
extra=models.CharField(null=True,blank=True,max_length=150)
website=models.CharField(null=True,blank=True,max_length=120)
game=models.ManyToManyField(OnlineGame)#manytomany because team have one or more online game team (for example sk gaming have lol and counter-strike team
def get_unique_slug(self):
slug=slugify(self.name.replace('ı','i'))
unique_slug=slug
counter=1
while Team.objects.filter(slug=unique_slug).exists():
unique_slug='{}-{}'.format(slug,counter)
counter+=1
return slug
def __str__(self):
return self.team_name
class PlayerGameRole(models.Model):
role=models.CharField(max_length=50)
class Player(models.Model):
slug=models.SlugField(unique=True,max_length=120)
nickname=models.CharField(max_length=120)
first_name=models.CharField(max_length=120)
last_name=models.CharField(max_length=50)
birthday=models.DateField(null=True,blank=True)
picture=models.ImageField(null=True,blank=True,upload_to='player')
country=models.CharField(max_length=50)
role=models.ManyToManyField(PlayerGameRole)
team=models.ForeignKey(Team,related_name='player',verbose_name='Team')
twitch=models.URLField(null=True,blank=True)
facebook=models.URLField(null=True,blank=True)
twitter=models.URLField(null=True,blank=True)
extra=models.CharField(max_length=150)
game=models.ManyToManyField(Game)
def get_unique_slug(self):
slug=slugify(self.nickname.replace('ı','i'))
unique_slug=slug
counter=1
while Player.objects.filter(slug=unique_slug).exists():
unique_slug='{}-{}'.format(slug,counter)
counter+=1
return slug
def age(self):
import datetime
return int((datetime.date.today() - self.birthday).days / 365.25)
解决方案
如果玩家可以同时在几个团队中,我认为您应该在 Player 模型中使用 ManyToMany 字段类型作为团队字段。比赛和球队之间的关系也应该是ManyToMany,因为一个球队可以打几场比赛,而比赛可以由几支球队进行。
推荐阅读
- mysql - 从包含的连接创建临时表+ 6500万条记录Mysql
- mysql - SQL多个更新查询一个接一个
- r - 如何使用对象名称从环境对象创建命名列表或向量?
- ios - 即使设置了高度,UIScrollView 也无法正常工作
- node.js - 如何将 create-react-app 作为大型网站的子目录提供服务?
- aac - 无法从 Source 编译 LiquidSoap 1.3
- r - 从R中的两列重新采样行
- google-kubernetes-engine - Cloud Composer 将结构化日志记录到 Stackdriver
- javascript - 在具有 3 列的表中显示 ajax 响应
- python - Matplotlib:将 3D 体积图保存到 numpy 数组