Queryset Django



这是我在Django中的观点:

class QuerySet1(generics.ListAPIView):
"""Количество приемов у каждого врача"""
permission_classes = [permissions.AllowAny, ]
def get_queryset(self):
app_num = Appointment.objects.values('record__doctor').annotate(amount=Count("id"))
app_num = list(app_num)
print(app_num)
return app_num
serializer_class = QuerySet1Serializer

输出为:

[{'record__doctor': 1, 'amount': 1}, {'record__doctor': 4, 'amount': 5}, {'record__doctor': 5, 'amount': 2}]

这是序列化程序:

class QuerySet1Serializer(serializers.Serializer):
amount = serializers.IntegerField()
doctor = serializers.CharField(source='record__doctor')
class Meta:
model = Appointment
fields = ("amount", "doctor")

当我运行代码时,它会给我下一个错误

AttributeError: 'dict' object has no attribute 'pk'

请帮忙!我该如何解决?谢谢

试试这个,你可以annotate分组的值,然后提取你想要的值

from django.db.models import F
qs = Appointment.objects.values('record__doctor').annotate(
amount=Count("id"), doctor=F('record__doctor')
).values('amount', 'doctor')

# list(qs) would yield as follows, no need to use source
[{'doctor': 1, 'amount': 1}, {'doctor': 4, 'amount': 5}, {'doctor': 5, 'amount': 2}]

# serializer
class QuerySet1Serializer(serializers.Serializer):
amount = serializers.IntegerField()
doctor = serializers.CharField(source='record__doctor')
# view
class MylistView(generics.ListAPIView):
"""Количество приемов у каждого врача"""
permission_classes = [permissions.AllowAny, ]
def get_queryset(self):
qs = Appointment.objects.values('record__doctor').annotate(
amount=Count("id"), doctor=F('record__doctor')
).values('amount', 'doctor')
return qs
serializer_class = QuerySet1Serializer