【问题标题】:Queryset Django查询集 Django
【发布时间】:2020-10-26 15:30:04
【问题描述】:

这是我在 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'

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

【问题讨论】:

  • app_numdict 而不是 QuerySet 对象

标签: json django api


【解决方案1】:

试试这个,你可以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

【讨论】:

  • 我的解释有点不正确,输出是我在 print(app_num) 之后得到的
  • @DaryaShipitcyna 你有一个 serilaizerclass Meta 指向一个模型,而你的序列化不需要模型
  • @DaryaShipitcyna 删除 Meta model=...,fields=(...) 选项,没有用
  • 返回Queryset对象,不是列表,只返回qs,还是不行?
  • 报告了哪些错误?我认为这会工作
猜你喜欢
  • 2017-01-12
  • 2012-04-26
  • 2013-12-06
  • 2021-07-25
  • 2011-05-16
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多