![](/img/trans.png)
[英]Why isn't my function returning anything but is returning when I am executing in interactive mode?
[英]Django Rest Framework - Why am I getting an error when the function isn't even supposed to do anything
有這個 URL:
path("products/product/<int:product>/rating/", ProductRating.as_view()),
這個視圖處理 URL:
class ProductRating(APIView):
permission_classes = [permissions.IsAuthenticated]
serializer_class = ProductRatingSerializer
def get(self, request):
breakpoint()
在 URL 中,int:product 中的產品只是相關產品的 ID。 無論我放在那里是 int:pk 還是 int:id 我每次都會得到同樣的錯誤:
TypeError: get() got an unexpected keyword argument 'product'
我試過使用通用視圖 RetrieveAPIView 和一個 APIView,我得到了同樣的錯誤。 為什么我收到錯誤而不是斷點?
def get(request, request, product):
breakpoint()
它現在應該工作了!
每當你處理一個 url 時,它的路徑中有一個查詢參數(id,pk,slug ...),它會傳遞給將 function 視為 kwarg。 所以你要么定義捕獲那個的顯式參數,要么你可以在 function 中定義一個 **kwargs 參數。
實施:
def get(self, request, product):
....
或者
def get(self, request, **kwargs):
product = kwargs.get("product")
...
改進說明:
首先調整你的 url 如下:
path("products/rating/<int:product>",ProductRating.as_view()),
為避免與其他網址發生任何可能的沖突,將關鍵字放在最后。 還要在 get function 中添加 *args 和 **kwargs 以將發送的關鍵字傳遞給 function。從提取產品的錯誤來看,這似乎可以解決您的問題。
下面我即興創作了 get function,這樣你就可以通過使用 self.kwargs 為基於 class 的視圖提取 url 參數,並返回 JsonResponse 作為完成 function 返回響應。
from django.http import JsonResponse
class ProductRating(APIView):
permission_classes = [permissions.IsAuthenticated]
serializer_class = ProductRatingSerializer
def get(self, request, *args, **kwargs):
product_id = self.kwargs["product"]
breakpoint()
return JsonResponse(data={"status": "200, Yay it works"})
代碼如下親愛的
class ProductRating(APIView):
permission_classes = [permissions.IsAuthenticated]
serializer_class = ProductRatingSerializer
def get(request, request, format=None):
breakpoint()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.