Как я могу проверить, является ли булево значение из другой модели истинным для пользователя команды?

У меня есть следующая модель, которую я хочу использовать для добавления прав пользователям, которые являются частью команды:

class Rights(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    team = models.ForeignKey(Teams, on_delete=models.CASCADE)
    read = models.BooleanField(default=True)
    write = models.BooleanField(default=False)
    edit = models.BooleanField(default=False)

Некоторым пользователям необходимо иметь возможность делать новые записи. Некоторым такая возможность запрещена. Итак, если какой-то пользователь посылает запрос, как я могу проверить, является ли одно или несколько из этих булевых значений истинным или ложным для этого конкретного пользователя?

Вы можете получить объект Rights, указывающий на myuser и myteam, а затем осмотреть поля read, write и/или edit:

right = Rights.objects.get(user=myuser, team=myteam)
right.read  # bool, True or False
right.write  # bool, True or False
right.edit  # bool, True or False

Вы можете гарантировать, что для каждой комбинации user/team существует не более одной записи с:

from django.conf import settings

class Right(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )
    team = models.ForeignKey(Teams, on_delete=models.CASCADE)
    read = models.BooleanField(default=True)
    write = models.BooleanField(default=False)
    edit = models.BooleanField(default=False)

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=('user', 'team'), name='unique_per_user_team')
        ]

Примечание: Обычно лучше использовать settings.AUTH_USER_MODEL [Django-doc] для ссылки на модель пользователя, чем использовать User модель [Django-doc] напрямую. Для получения дополнительной информации вы можете посмотреть ссылка на User модель раздел документации .


Примечание: обычно модели Django дается сингулярное имя, поэтому Right вместо Rights.

Вернуться на верх