You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django用户组权限页面问题:库存管理员角色显示未定义用户

问题:不同用户组按钮显示异常,inventorymanager角色显示Undefined User

问题现象

实现不同用户组查看对应按钮功能时,employee角色登录可正常显示对应菜单和按钮,但inventorymanager角色登录后仅显示“Undefined User”。

界面截图

  • 员工角色视图:
    employee view
  • 库存管理员角色视图:
    inventory manager view

相关代码

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
    })
{% 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:45:42