有没有办法在调用查询集的序列化器中创建自定义字段? 这就是我正在尝试做的事情:
我有一个 Employee 序列化器,我想包含“last_attendance”字段。
class EmployeeSerializer(serializers.ModelSerializer):
class Meta:
model = Employee
fields = ("id",
"username",
"first_name",
"last_name")
我想再添加一个字段“last_attendance”。 这是一个像这样的查询集:
"last_attendance" = Attendance.objects.filter(employee_id = id_of_that_employee).last()
更新:
供您参考,我正在尝试在此 REST api 中使用 EmployeeSerializer
queryset = Employee.objects.annotate(fullname=Concat('first_name', Value(' '), 'last_name'))
employee_list = queryset.filter(fullname__icontains=request.POST['search_string'],
company=auth_employee.employee.company.id).order_by('id')
page = request.GET.get('page', request.POST['page'])
paginator = Paginator(employee_list, request.POST['page_limit'])
try:
employees = paginator.page(page)
except PageNotAnInteger:
employees = paginator.page(request.POST['page'])
except EmptyPage:
employees = []
serializer = EmployeeSerializer(list(employees), many=True)
data = serializer.data[:]
return Response(data, status=status.HTTP_200_OK)
更新:
我发现可能相关,但还没有弄清楚如何应用Django Rest Framework - 如何在 ModelSerializer 中添加自定义字段
MethodField
:
class EmployeeSerializer(serializers.ModelSerializer):
last_attendance = serializers.SerializerMethodField()
class Meta:
model = Employee
fields = (
"id",
"username",
"first_name",
"last_name",
"last_attendance",
)
def get_last_attendance(self, obj):
attendance = Attendance.objects.filter(
employee_id=id_of_that_employee
).last()
if attendance:
return (
attendance.date
) # assuming it has this field
else:
return None