簡體   English   中英

Django Rest 框架 - 當 function 甚至不應該做任何事情時,為什么我會收到錯誤消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM