我有一個 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 回應。
當我嘗試對查詢集進行分組以回傳產品的平均價格時,就會出現問題。通過在互聯網上進行一些研究,我注意到我只需要將 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 進行分組操作后回傳產品的平均價格?
uj5u.com熱心網友回復:
category模型的外鍵是什么?在這種情況下,我認為問題出在這個領域。
我相信,當您呼叫時,.values()您會獲得 foreignKey-fields 的 id,并且您不能再將該欄位作為物件訪問。
所以 REST 框架試圖訪問pk它認為是Category.
要解決此問題,您可以創建一個自定義序列化程式,其中category是一個整數,并且您已經添加了price_average. 你必須檢查欄位型別,我不知道你有什么型別。
class ProductPriceAverageSerializer(serializers.Serializer):
category = serializers.IntegerField()
price_average = serializers.FloatField()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/531284.html
標籤:Pythondjangoapi休息django-rest-framework
