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

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)
Вернуться на верх