Модель отношений между игроком и командой - PullRequest
0 голосов
/ 05 июля 2019

Я строю базу данных для показа турниров онлайн-игр.У меня есть три вопроса:

первый, какой метод я должен использовать

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)

1 Ответ

0 голосов
/ 05 июля 2019

Я думаю, вы должны использовать тип поля ManyToMany для поля команды в модели игрока, если игрок может быть в нескольких командах одновременно. Отношения между матчем и командой также должны быть ManyToMany, потому что команда может сыграть несколько матчей, а матч могут сыграть несколько команд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...