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

Django同一模板渲染多模型数据:客户卡片无法显示

Django共享模板同时渲染多模型数据解决方案

核心问题纠正

你错误地将get_context_data方法添加到了CustomUser模型中——这个方法是**Django类视图(比如ListView)**的方法,不是模型的方法,所以根本无法将数据传递到模板。

具体解决步骤

1. 在现有ListView中扩展上下文

既然你已经用ListView渲染GarbageCollectionRequest数据,直接在这个视图类里重写get_context_data,把CustomUser的数据注入上下文即可,无需单独创建新视图。

from django.views.generic import ListView
from .models import GarbageCollectionRequest, CustomUser

class AdminDashboardView(ListView):
    model = GarbageCollectionRequest
    template_name = 'admin_dash.html'
    context_object_name = 'requests'  # 对应模板中请求列表的循环变量

    def get_context_data(self, **kwargs):
        # 先获取父类生成的基础上下文(包含请求列表数据)
        context = super().get_context_data(**kwargs)
        # 添加CustomUser数据到上下文,可根据需求过滤(比如排除管理员)
        context['custom_users'] = CustomUser.objects.filter(is_staff=False)
        # 若需所有用户,替换为CustomUser.objects.all()
        return context

2. 模板中正确渲染用户卡片

确保模板里使用正确的变量名循环custom_users,示例代码:

<!-- 用户卡片展示区域 -->
<div class="user-card-container">
    {% for user in custom_users %}
        <div class="card">
            <h4>{{ user.username }}</h4>
            <p>邮箱: {{ user.email }}</p>
            <p>注册时间: {{ user.date_joined|date:"Y-m-d" }}</p>
            <!-- 替换为你CustomUser模型的实际字段 -->
        </div>
    {% empty %}
        <p>暂无用户数据</p>
    {% endfor %}
</div>

<!-- 已正常工作的垃圾收集请求表格 -->
<table class="request-table">
    {% for req in requests %}
        <tr>
            <td>{{ req.id }}</td>
            <td>{{ req.user.username }}</td>
            <td>{{ req.collection_date }}</td>
            <!-- 其他请求字段 -->
        </tr>
    {% endfor %}
</table>

3. 排查常见问题

  • 确认CustomUser模型有数据:检查数据库中是否存在用户记录,避免触发{% empty %}
  • 变量名严格匹配:视图中上下文的key是custom_users,模板循环必须用完全相同的名称
  • 权限验证:如果视图有登录/管理员权限限制,确保当前用户能访问CustomUser的查询集
  • 字段存在性:模板中引用的用户字段(如username、email)必须在CustomUser模型中定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:42:20