Как проверить это пользователь является одной из групп в списке групп - PullRequest
0 голосов
/ 16 января 2020

У меня есть список групп, и я хочу проверить, принадлежит ли пользователь какой-либо из групп.

Я могу получить список групп пользователей:

user_groups = user_object.groups.all()

И я могу использовать наборы:

if not set(user_object.groups.all()).isdisjoint(group_list):

Это лучший способ?


Добавлено:

group_list происходит из поля многие ко многим от другой модели (MyClass.groups_allowed.all())

class MyClass(models.Model):
    ...
    groups_allowed = ManyToManyField(Group, default=None, blank=True)
    ...

    def user_can_view(self, user_object):
        ...
        if not set(user_object.groups.all()).isdisjoint(self.groups_allowed.all()):
            return True
        ...

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Вы можете проверить группу пользователя как

if user_object.groups.filter(name = groupname).exists():
    pass

или

if user_object.groups.filter(name__in= groupname_list):
    pass
0 голосов
/ 16 января 2020

, если group_list - это набор запросов:

user_object.groups.filter(id__in=group_list.values_list('id', flat=True))

, в противном случае вы получаете идентификатор из этого списка и делаете следующее:

user_object.groups.filter(id__in=groups_id_list)

он делает только один запрос к вашей базе данных

...