如何通过Django REST API返回一个组?

6jygbczu  于 2022-11-19  发布在  Go
关注(0)|答案(1)|浏览(139)

我有一个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返回一组操作后产品的平均价格吗?

qncylg1j

qncylg1j1#

category是一个模型的外键吗?我认为在这种情况下问题出在这个字段上。
我相信当你调用.values()时,你会得到foreignKey-fields的id,你不能再把它作为一个对象来访问了。
因此,REST框架尝试访问它认为是Category示例的pk属性。
要解决这个问题,你可以创建一个自定义序列化器,其中category是一个整数,而你已经添加了price_average。你必须检查字段类型,我不知道你有什么类型。

class ProductPriceAverageSerializer(serializers.Serializer):
    category = serializers.IntegerField()
    price_average = serializers.FloatField()

相关问题