Для примера можно создать страницу, где будут отражены все группы, существующие в базе данных. Для этого нужно убедиться, что группы созданы. В терминале переходим в папку с проектом. Запускаем сервер.
Создаем шаблон в папке с шаблонами, например groups-list.html, наследуем через {% extends ‘путь к базовому шаблону’ %}.Создаем блоки title и body.
Создаем wiew функцию, например def groups_list(request).
В файле приложения urls.py добавляем нашу wiew функцию.
Для того что бы на странице отобразить список групп – эти группы необходимо достать из базы данных. Для этого необходимо написать код. Переходим в нашу wiew функцию def groups_list(request) и в context создать переменную “groups”,которая будет ссылаться на модель Group(from django.contrib.auth.models import Group).
context = {
“groups”: Group.objects.all(),
}
all() -позволяет вытащить все группы.
“groups” – список групп, которые можно вывести в шаблоне.
У группы(Group) есть свойство permission(многие ко многим) и эта связь с объектами Permission.
permission– свойство из доступов.
Для отображения на странице информации о группе, в шаблоне через цикл можно указать, например:
for group in groups
group.name – имя группы.
group.permissions.all– будут отображены permission для каждой группы в виде QuerySet. Список.
Если обратиться к базе данных, таблица auth_permission, есть колонки codename, name.
Можно вывести в списке:
for permission in group.permissions.all
permission.name – имя permission
permission.codename – код permission
!!! Важно уточнить, что когда делать запрос к permissions.all, то для каждой групп происходит отдельный запрос. Поэтому при большом количества групп – страница будет грузиться долго. Для сокращения запросов к БД необходимо можно отредактировать в wiew функции, как получаются группы.
К “groups”: Group.objects.all()нужно добавить подгрузку связанных permissions.
Для этого: “groups”: Group.objects.prefetch_related(“permissions”).all()
context = {
“groups”: Group.objects.prefetch_related(“permissions”).all(),
}
prefetch_related(“permissions”) - подгрузку связанных permissions. В скобочках указывается свойство, которое необходимо подгрузить. И это свойство по имени, должно полностью совпадать с тем, какой атрибут по имени в модели Group.