首页 > 解决方案 > 球员-球队模型关系

问题描述

我正在建立一个数据库来显示在线游戏的比赛。我有三个问题;

第一个,我应该使用哪种方法

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)

标签: djangodjango-models

解决方案


如果玩家可以同时在几个团队中,我认为您应该在 Player 模型中使用 ManyToMany 字段类型作为团队字段。比赛和球队之间的关系也应该是ManyToMany,因为一个球队可以打几场比赛,而比赛可以由几支球队进行。


推荐阅读