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

使用Django REST Framework获取员工考勤列表时遇ValueError错误求助

解决Django REST Framework中查询考勤列表的ValueError问题

嘿,这个错误其实很好理解——你在过滤EmployeeAttendance的时候,直接用了self.request.user(这是个User模型的实例)去匹配employee字段,但这个字段关联的是Employee模型,Django自然会告诉你“你传的不是我要的Employee实例”。

问题根源

你的Employee模型和User是一对一关联的,而EmployeeAttendance的employee字段指向的是Employee,不是User。所以直接用User实例去过滤肯定不对。

修复方案

你需要先通过当前登录的User实例,找到对应的Employee实例,再用这个实例去过滤考勤记录。因为你在Employee的user字段里设置了related_name='employee',所以可以直接通过request.user.employee拿到关联的员工对象。

修改后的get_queryset方法代码如下:

def get_queryset(self):
    # 先获取当前用户对应的Employee实例
    employee = self.request.user.employee
    # 用Employee实例过滤考勤记录
    queryset = EmployeeAttendance.objects.filter(employee=employee).order_by('-created_at')
    return queryset

额外提醒

为了避免用户没有对应的Employee记录时抛出异常,你可以加上异常处理或者用get_object_or_404来处理,比如:

from django.shortcuts import get_object_or_404

def get_queryset(self):
    employee = get_object_or_404(Employee, user=self.request.user)
    queryset = EmployeeAttendance.objects.filter(employee=employee).order_by('-created_at')
    return queryset

这样如果当前用户没有关联的员工信息,会直接返回404,比默认的DoesNotExist异常更友好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:52:52