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

Django技术问题:如何仅展示当前登录用户的排班数据?

解决Django中仅显示当前登录用户排班的问题

核心问题

你当前视图里用RosteringUser.objects.all()会查询所有用户的排班关联记录,没有过滤当前登录用户,所以页面显示了全部数据。同时代码存在两处可优化的地方:循环查询数据库会引发性能问题,模板里的字段引用也有误。

修改步骤

1. 过滤当前登录用户的排班记录

通过request.user获取当前登录用户,过滤RosteringUser中user字段匹配当前用户的记录,同时用select_related一次性拉取关联的排班数据,避免循环查库:

from django.contrib.auth.decorators import login_required

@login_required  # 确保只有登录用户能访问该页面
def my_shift(request):
    if request.method == 'GET':
        # 筛选当前用户的排班关联记录,同时预加载关联的Rostering数据
        queryset = RosteringUser.objects.filter(user=request.user).select_related('rostering_user')
        return render(request, 'my_shift.html', {'queryset': queryset})

2. 修复模板中的字段引用错误

RosteringUser模型里关联Rostering的字段是rostering_user,无需手动修改obj.id,模板直接引用该字段即可:

{% for obj in queryset %}
<tr>
    <td>{{ obj.user.user_name }}</td>
    <td>{{ obj.rostering_user.name }}-{{ obj.rostering_user.begin_time }}</td>
    <td>{{ obj.rostering_user.name }}-{{ obj.rostering_user.end_time }}</td>
</tr>
{% endfor %}

额外说明

  • @login_required装饰器会自动拦截未登录用户,跳转到登录页面,避免因request.user为空导致的报错。
  • select_related用于一对一/外键关联的预加载,能把两次数据库查询合并为一次,大幅提升页面加载效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:55:22