json - 查询集 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
推荐阅读
- python - isin、str.contains 和 if 条件之间的区别?
- laravel - 我想用 Laravel 6 创建一个登录页面,在同一服务器中的 Laravel 和 Codeigniter 程序之间共享登录信息
- android - 如何使用 AlertDialog 设置多种类型?
- elasticsearch - elasticsearch无痛数组第一个元素
- css - 防止在网格布局中将换行符复制到剪贴板
- java - 将自定义依赖项添加到spring项目后缺少类
- git - 为每个分支设置拉取请求合并选项
- spring-mvc - 如何在不同的 html 页面之间共享一个 WebSocket 连接?
- javascript - 嵌套循环忽略其他元素
- xml - 将 XML 字符串转换为 scala XML 文字