我有一个Django REST API,当我想从数据库中查询一些数据时,它可以很好地工作。
查看次数.py
class ProductListAPIView(generics.ListAPIView):
def get_queryset(self):
# Collect data from products table and filter it
queryset = Product.objects.filter(name="Ferrari", date__lte="2022-08-01") # <- Substitute with line below
return queryset
serializer_class = ProductSerializer
authentication_classes = [authentication.SessionAuthentication, authentication.TokenAuthentication]
permission_classes = [IsOwnerPermission]
序列化程序.py
from rest_framework import serializers
from insert_data.models import Product
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ["name","category","date","price"]
输出是我所期望的,即带有数据库内容的json响应。
当我试图对查询集进行分组以返回产品的平均价格时,问题就出现了。通过在互联网上做一些研究,我注意到我只需要用下面的代码行替换www.example.com脚本中的代码行views.py:
Product.objects.filter(name=params['name'], date__lte=query.date).values('name','category').annotate(price_average=Avg('price')).order_by()
我很有信心这样做的工作,但API返回一个错误,我不知道如何修复:AttributeError: 'int' object has no attribute 'pk'
我完全不知道这是指什么。你能建议一个聪明而优雅的方法来通过REST API返回一组操作后产品的平均价格吗?
1条答案
按热度按时间qncylg1j1#
category
是一个模型的外键吗?我认为在这种情况下问题出在这个字段上。我相信当你调用
.values()
时,你会得到foreignKey-fields的id,你不能再把它作为一个对象来访问了。因此,REST框架尝试访问它认为是
Category
示例的pk
属性。要解决这个问题,你可以创建一个自定义序列化器,其中
category
是一个整数,而你已经添加了price_average
。你必须检查字段类型,我不知道你有什么类型。