Роли в модели Джанго - PullRequest
1 голос
/ 05 июля 2019

У меня есть модель в django, в которой будет несколько ролей - обычный пользователь, администратор и менеджер.Каждый из них сможет сделать что-то еще.Следующая модель в порядке, чтобы работать правильно?

class Team(models.Model):
    name = models.CharField('Name', max_length=128)
    users = models.ManyToManyField(User)
    admins = models.ManyToManyField(User)
    managers = models.ManyToManyField(User)

    def __str__(self):
        return self.name

1 Ответ

1 голос
/ 05 июля 2019

Это может сработать.Если количество ролей велико или динамично (как в ролях, можно добавлять, удалять, переименовывать, обновлять).Вы можете ввести троичное отношение, например:

django.contrib.auth import get_user_model

class Role(models.Model):
    name = models.CharField(max_length=128)


class Team(models.Model):
    name = models.CharField('Name', max_length=128)
    members = models.ManyToManyField(get_user_model(), <b>through='Membership'</b>)

    def __str__(self):
        return self.name

class <b>Membership</b>(models.Model):
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    team = models.ForeignKey(Team, on_delete=models.CASCADE)
    role = models.ForeignKey(Role, on_delete=models.PROTECT)
...