Django用户组权限页面问题:库存管理员角色显示未定义用户
问题:不同用户组按钮显示异常,inventorymanager角色显示Undefined User
问题现象
实现不同用户组查看对应按钮功能时,employee角色登录可正常显示对应菜单和按钮,但inventorymanager角色登录后仅显示“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
{% extends "app/layout.html" %} {% block content %} <div> <br /> {% if is_employee %} <h2>Employee Menu</h2> {% elif is_inventorymanager %} <h2>Inventory Manager Menu</h2> {% elif is_financialdirector %} <h2>Financial Director Menu</h2> {% elif is_vendor %} <h2>Vendor Menu</h2> {% else %} <h2>Undefined</h2> {% endif %} <br /> <table> {% if is_employee %} <tr><td> <form class="margintop" action='createpurchaseorder' method='GET'> <button type="submit" class="btn btn-info"> EMP | Create Purchase Order</button><br /> </form> </td></tr> <tr><td> <form class="margintop" action='createdeliveryorder' method='GET'> <button type="submit" class="btn btn-info"> VEN | Create Delivery Order</button><br /> </form> </td></tr> <tr><td> <form class="margintop" action='listview_po' method='GET'> <button type="submit" class="btn btn-info">EMP FM VEND | View Purchase Orders</button><br /> </form> </td></tr> <tr><td> <form class="margintop" action='listview_do' method='GET'> <button type="submit" class="btn btn-info">IM VEN | View Delivery Orders </button><br /> </form> </td></tr> <tr><td> <form class="margintop" action='list_po' method='GET'> <button type="submit" class="btn btn-info">FD | Verify Purchase Orders</button><br /> </form> </td></tr> <tr><td> <form class="margintop" action='list_do' method='GET'> <button type="submit" class="btn btn-info">IM | Verify Delivery Orders</button><br /> </form> </td></tr> <tr><td> <form class="margintop" action='viewpurchaseorder' method='GET'> <button type="submit" class="btn btn-outline-info waves-effect">(Bug) Search Purchase Order</button><br /> </form> </td></tr> {% elif is_inventorymanager %} <tr><td> <form class="margintop" action='verifydeliveryorder' method='GET'> <button type="submit" class="btn btn-info">Verify Delivery Order</button><br /> </form> </td></tr> <tr><td> <form class="margintop" action='viewdeliveryorder' method='GET'> <button type="submit" class="btn btn-outline-info waves-effect">View Delivery Order</button><br /> </form> </td></tr> <tr><td> <form class="margintop" action='createpurchaseorder' method='GET'> <button type="submit" class="btn btn-info">Create Purchase Order</button><br /> </form> </td></tr> {% elif is_financialdirector %} <tr><td> <form class="margintop" action='verifypurchaseorder' method='GET'> <button type="submit" class="btn btn-info">Verify Purchase Order</button><br /> </form> </td></tr> <tr><td> <form class="margintop" action='viewpurchaseorder' method='GET'> <button type="submit" class="btn btn-outline-info waves-effect">View Purchase Order</button><br /> </form> </td></tr> {% elif is_vendor %} <tr><td> <form class="margintop" action='viewpurchaseorder' method='GET'> <button type="submit" class="btn btn-outline-info waves-effect">View Purchase Order</button><br /> </form> </td></tr> <tr><td> <form class="margintop" action='viewdeliveryorder' method='GET'> <button type="submit" class="btn btn-outline-info waves-effect">View Delivery Order</button><br /> </form> </td></tr> {% else %} <tr><td> <p>Undefined User.</p> </td></tr> <tr><td> {% endif %} </table> </div> {% endblock %}
解决方案
1. 调试变量值,确认逻辑触发条件
在views.py的menu函数中添加调试代码,查看变量是否正确:
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() # 添加调试打印 print(f"用户: {user.username}, is_employee: {is_employee}, is_inventorymanager: {is_inventorymanager}") return render(request, 'app/menu.html', { 'is_employee': is_employee, 'is_inventorymanager': is_inventorymanager, 'is_financialdirector': is_financialdirector, 'is_vendor': is_vendor })
运行服务器后,登录inventorymanager角色,查看控制台输出:
- 如果
is_inventorymanager为False,说明用户不在目标组或组名有误,执行步骤2; - 如果
is_inventorymanager为True,说明模板逻辑判断有问题,执行步骤3。
2. 检查用户组配置
- 进入Django后台,确认存在名为
inventorymanager的用户组(注意大小写和拼写必须与代码完全一致); - 确认
inventorymanager角色的用户已被正确添加到该组,且未被误加入employee组(否则会优先触发is_employee的判断分支)。
3. 调整模板判断逻辑(可选,支持多组用户)
如果需要允许用户同时属于多个组,可将模板中的elif改为独立的if判断(根据需求调整),例如:
{% if is_employee %} <!-- 员工菜单内容 --> {% endif %} {% if is_inventorymanager %} <!-- 库存管理员菜单内容 --> {% endif %} <!-- 其他组同理 --> {% if not is_employee and not is_inventorymanager and not is_financialdirector and not is_vendor %} <p>Undefined User.</p> {% endif %}
内容的提问来源于stack exchange,提问作者rei
相关产品推荐
相关产品推荐

