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

Django ForeignKey字段匹配查询返回空QuerySet问题

问题原因

你的查询返回空结果核心是两个低级错误:

  • URL里传递的manager参数是字符串类型,不是Manager模型实例。你在attendance视图里从POST取到的manager是前端传的字符串值,跳转路由时直接把这个字符串传给了mark_attendance,用字符串去匹配Employee的外键字段自然匹配不到任何数据,你之前print觉得输出正确,只是打印了字符串本身,不是模型对象。
  • 你用了Employee.objects.get()查询员工,get()设计上只会返回单条匹配记录,一个管理者本来对应多个员工,就算参数传对了,这里也会抛出MultipleObjectsReturned异常,查询多条记录本来就该用filter()。
修复方案
  1. 先确认前端attendance页面的表单中,manager选项的value值绑定的是Manager模型的主键id,不要用name字段或者你处理过的带下划线的select_name,避免重名导致匹配错误。
  2. 在mark_attendance视图中,先拿URL传入的字符串id查询出对应的Manager实例,再用这个实例作为条件筛选员工,同时把get()换成filter()。
  3. 修复代码里其他附带的逻辑错误。

修正后的mark_attendance视图代码如下:

from django.utils import timezone

@login_required
def mark_attendance(request, manager):
    # 将URL传入的字符串主键转换为Manager模型实例
    manager_instance = Manager.objects.get(id=manager)
    # filter返回对应管理者下的所有员工列表
    employee_list = Employee.objects.filter(manager=manager_instance)
    if request.method == "POST":
        for employee in employee_list:
            decision = request.POST.get(f'decision_{employee.pk}')
            # 用timezone.now()取当前时间,符合Django时区配置逻辑
            attendance_record = Attendance(
                employee=employee,
                date=timezone.now().date(),
                status=decision
            )
            attendance_record.save()
        # 重定向时带上manager参数,避免路由参数缺失报错
        return redirect('mark_attendance', manager=manager)
    return render(request, 'mark_attendance.html', {
        "employee_list": employee_list,
    })
其他需要同步修复的代码问题
  • attendance视图中now = timezone.now().date缺少调用括号,正确写法是now = timezone.now().date(),否则传给模板的是方法对象,不是实际日期值。
  • Employee模型中employee_id字段的primary_key参数传了字符串'True',规范写法是传布尔值True,即employee_id = models.CharField(primary_key=True, max_length=100)。
  • Attendance模型的__str__方法逻辑错误,self.employee本身就是关联的Employee实例,不需要额外查库,正确写法:
    def __str__(self):
        return self.employee.name
    
  • 不要用HttpResponseRedirect直接写相对路径跳转,统一用redirect()配合路由名传参,避免URL拼接错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:18:12