Я создал пользовательскую группу на сайте администратора Django.
В своем коде я хочу проверить, есть ли пользователь в этой группе. Как я могу это сделать?
Я создал пользовательскую группу на сайте администратора Django.
В своем коде я хочу проверить, есть ли пользователь в этой группе. Как я могу это сделать?
Вы можете получить доступ к группам просто через groups
атрибут User
.
from django.contrib.auth.models import User, Group
group = Group(name = "Editor")
group.save() # save this new group for this example
user = User.objects.get(pk = 1) # assuming, there is one initial user
user.groups.add(group) # user is now in the "Editor" group
затем user.groups.all()
возвращается [<Group: Editor>]
.
В качестве альтернативы, а точнее, вы можете проверить, входит ли пользователь в группу:
if django_user.groups.filter(name = groupname).exists():
...
Обратите внимание, что groupname
это также может быть фактический объект Django Group.
if user.groups.filter(name=group_name).count(): # do something
Ваш объект User связан с объектом Group через отношение ManyToMany .
Таким образом, вы можете применить метод фильтра к user.groups .
Итак, чтобы проверить, входит ли данный пользователь в определенную группу (например, «Участник»), просто сделайте это:
Если вы хотите проверить, принадлежит ли данный пользователь нескольким группам, используйте оператор __in, например:
Обратите внимание, что эти функции можно использовать с декоратором @user_passes_test для управления доступом к вашим представлениям:
Надеюсь это поможет
источник
user in groups
(или наоборот)..exists()
в конец, чтобы вернуть логическое значение? В противном случаеis_member()
иis_in_multiple_groups()
вернет aQuerySet
, что может не дать желаемого результата.def is_member(user): return user.is_superuser or user.groups.filter(...
is_in_multiple_groups
может быть более явно назван,is_in_some_groups
так как он не требует, чтобы пользователь был членом всех группЕсли вам нужен список пользователей, входящих в группу, вы можете сделать это вместо этого:
а затем проверьте
проверить, есть ли пользователь в группе.
источник
user.groups.filter(name="group name").exists()
должно работать нормально. Решение, которое вы написали, использует два запроса и поэтому не очень оптимально.Если вам не нужен пользовательский экземпляр на сайте (как я сделал), вы можете сделать это с
Это произведет только один запрос к базе данных и вернет логическое значение.
источник
Если пользователь принадлежит к определенной группе или нет, это можно проверить в шаблонах django, используя:
{% if group in request.user.groups.all %}
"some action"
{% endif %}
источник
Вам просто нужна одна строка:
источник
На всякий случай, если вы хотите проверить, входит ли группа пользователей в предопределенный список групп:
источник
У меня похожая ситуация, я хотел проверить, находится ли пользователь в определенной группе. Итак, я создал новый файл utils.py, куда я помещаю все свои маленькие утилиты, которые помогают мне в работе всего приложения. Там у меня есть это определение:
так что в основном я тестирую, если пользователь находится в группе company_admin и для ясности я назвал эту функцию is_company_admin .
Когда я хочу проверить, есть ли пользователь в company_admin, я просто делаю это:
Теперь, если вы хотите проверить то же самое в своем шаблоне, вы можете добавить is_user_admin в вашем контексте, что-то вроде этого:
Теперь вы можете оценить свой ответ в шаблоне:
Простое и понятное решение, основанное на ответах, которые можно найти ранее в этой теме, но сделано по-другому. Надеюсь, это кому-нибудь поможет.
Протестировано в Django 3.0.4.
источник
data = Company.objects.all().filter(id=request.user.company.id)
означает компания? Это твоя модель?В одной строке:
Это оценивает либо либо,
True
либоFalse
.источник
.exists()
чтобы позволить БД сделать работу.Я сделал это следующим образом. Кажется неэффективным, но у меня не было другого пути в моей голове:
источник
User.objects.filter(username='tom', groups__name='admin').exists()
Этот запрос проинформирует вас: "Tom" принадлежит ли вам группа "admin" или нет
источник
Я сделал это так Для группы им
Editor
.шаблон
источник