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

Django无法显示排除Staff与Superuser的用户总数求助

解决Django仪表盘排除staff和superuser的用户总数统计问题

1. 修正视图中的查询逻辑

确保视图里的用户过滤逻辑正确,排除所有is_staff=True或is_superuser=True的用户,两种写法任选其一:

# views.py
from django.contrib.auth import get_user_model
from django.shortcuts import render
# 若用Q对象需导入
# from django.db.models import Q

def dashboard_view(request):
    User = get_user_model()
    # 方式1:链式排除,最终效果为排除任意一个条件为True的用户
    user_count = User.objects.exclude(is_staff=True).exclude(is_superuser=True).count()
    
    # 方式2:用Q对象实现逻辑或排除,语义更直观
    # user_count = User.objects.exclude(Q(is_staff=True) | Q(is_superuser=True)).count()
    
    return render(request, 'dashboardowner/index.html', {'user_count': user_count})

2. 验证CustomUser模型字段

如果你的CustomUser继承自AbstractUser,则默认自带is_staff和is_superuser布尔字段;如果是完全自定义模型,需确保这两个字段存在且类型正确:

# models.py
from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    # 自定义字段示例
    phone = models.CharField(max_length=11, blank=True)
    
    # 若重写了基础字段,需保证以下字段存在(继承AbstractUser则无需手动定义)
    # is_staff = models.BooleanField(default=False, help_text='是否可访问管理后台')
    # is_superuser = models.BooleanField(default=False, help_text='是否为超级管理员')

3. 检查模板渲染细节

确认模板中变量名拼写正确,无语法错误:

<!-- dashboardowner/index.html -->
<div class="stats-card">
    <h4>普通用户总数</h4>
    <p>{{ user_count }}</p>
</div>

可临时加入{% debug %}标签,查看上下文是否包含user_count变量,排查是否传值失败:

{% debug %}

4. 确认路由配置正确性

确保路由正确映射到dashboard_view:

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('dashboard/', views.dashboard_view, name='dashboard'),
]

调试技巧

  • 在视图中打印user_count,直接查看控制台输出的数值是否符合预期:
    print(f"普通用户总数:{user_count}")
    
  • 登录Django后台,手动核对符合条件的用户数量,验证查询逻辑是否正确。

内容的提问来源于stack exchange,提问作者Siau Tong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:20:04