Как связать разных пользователей, чтобы они по-разному просматривали страницу?
hi если кто знаком с django, я работаю над тем, как разные группы пользователей смогут просматривать разные кнопки, но я не могу заставить это работать; мой elif не работает, когда я вхожу в систему как сотрудник, я могу просматривать кнопки, но когда я вхожу в систему как менеджер инвентаризации, я могу просматривать только undefined user
представление сотрудника представление менеджера по запасам
Ниже приведены мои коды views.py
def menu(request):
user = request.user
is_employee = request.user.groups.filter(name='employee').exists()
is_inventorymanager = user.groups.filter(name='inventorymanager').exists()
is_financialdirector = user.groups.filter(name='financialdirector').exists()
is_vendor = user.groups.filter(name='vendor').exists()
return render(request, 'app/menu.html', {
'is_employee': is_employee,
'is_inventorymanager': is_inventorymanager,
'is_financialdirector': is_financialdirector,
'is_vendor': is_vendor
})
menu.html (интерфейс)
похоже, что у вас есть возможность сделать пользователя членом разных групп. это означает, что если пользователь employee
и inventory manager
- это нормально
Если это должно быть так:
тогда вы будете отображать разные меню в одном шаблоне
Если нет:
Я предлагаю вам использовать другое поле для пользователя, что-то вроде:
class UserRoles(models.IntegerChoices):
EMPLOYEE = 1, "Employee"
INVENTORY_MANAGER = 2, "Inventory manager"
...
class CustomUser(AbstractUser):
...
role = models.PositiveSmallIntegerField(choices=UserRoles.choices, default=UserRoles.employee)
...
тогда вы можете определить const с помощью шаблонов:
MENU_TEMPLATE_PER_USER_ROLE = {
UserRoles.EMPLOYEE: "templates/employee_menu.html",
UserRoles.INVENTORY_MANAGER: "templates/inventory_manager_menu.html",
...
}
и использовать это в представлениях при выборе шаблонов
def menu(request):
template = MENU_TEMPLATE_PER_USER_ROLE.get(request.user.role, default="templates/default_menu.html")
return render(request, template)