2016-11-26 55 views
0

非常快速的問題,那就是如何窩在Django的休息框架的請求的另一個API端點。我有終點A,我做了POST,並且想要在它的序列化器perform_create方法中指出B的另一個請求。這個API端點實際上是用相同的Django應用程序編寫的。如何使DRF請求指向同一Django應用程序

  • 串行的API一個

    class ReadingCreate(CreateAPIView): 
    
        permission_classes = [IsOwnerOrReadOnly] 
        serializer_class = ReadingCreateSerializer 
    
        def perform_create(self, serializer): 
         #HERE I WANT TO MAKE REQUEST TO POINT B 
         serializer.save(user_profile= UserProfile.objects.get(user=self.request.user)) 
    

我所熟悉的庫,例如請求,但我希望有,因爲一個更好的辦法,我還需要發送令牌身份驗證和我像在同一個文件中。這個問題看起來很簡單,但我顯然不知道如何正確地做到這一點。

更新: 爲了解釋更多,「請求」應該找到根據,我把它通過ReadingCreateSerializer書號一本書。但首先我需要找到一本書(Google API),然後將其保存到我的數據庫。這需要完成,因爲書籍模型獨立於UserProfile對象,而Reading不是(具有附加信息)。這就是我的「請求」所做的。

當然,這可能是與從客戶雙鏈請求做,但我不希望這樣。

  • 串行:

    class ReadingCreateSerializer(serializers.HyperlinkedModelSerializer): 
        isbn = serializers.CharField(required=True, max_length=20) 
    
        class Meta: 
         model = Reading 
         fields = ['isbn', 'notes', 'rating', 'start_reading_date', 'end_reading_date'] 
    
  • 我試着基礎上,答案是什麼:視野和串行的一部分一部分

    def perform_create(self, serializer): 
        self.request.method = 'POST' 
        serializer.save(user_profile=UserProfile.objects.get(user=self.request.user), request=self.request) 
    
    def save(self, **kwargs): 
        isbn = self.validated_data['isbn'] 
        request = kwargs.get("request", {}) 
        request.data = {'isbn': isbn} 
        post_book(request) 
    

我發現的是,我可以」 t導入視圖(在我的例子post_book)序列化我猜這是不允許的Django。

+2

你爲什麼要提出一個要求不惜一切,而不僅僅是打電話給你想要的方法是什麼?這個請求究竟應該做什麼? –

+0

我嘗試過,但我需要isbn字段。檢查更新。 – alphiii

+0

什麼是這裏的postbook?爲什麼你猜測你不能導入?你試過了嗎?如果是的話錯誤是什麼? – itzMEonTV

回答

2

這將執行您的API類。

APIClassB.as_view()(self.request) 

如果您需要更改請求方法

self.request.method = 'POST' 
APIClassB.as_view()(self.request) 
+0

感謝您的提示,但我也需要從序列化程序(更新)清理領域。 – alphiii

相關問題