使用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
相关产品推荐
相关产品推荐

