完成此操作的代碼實際上位於文檔頁面this section的底部。在這裏引用一下:
@detail_route(methods=['post'], permission_classes=[IsAdminOrIsSelf])
def set_password(self, request, pk=None):
...
對於工作,你會希望通過文檔的Authentication and permission部分,尤其是涉及associating data with a particular user的部分,這表明覆蓋默認perform_create
視圖的方法來添加一個owner
閱讀參數:
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
響應於下面的評論:
的perform_create
方法屬於GenericAPIView
類,其具有以下功能(從here引用:)
此類擴展REST框架的APIView
類,添加了對標準列表和詳細視圖通常所需的行爲。
提供的每個具體通用視圖都是通過將GenericAPIView
與一個或多個mixin類相結合而構建的。
perform_create
是屬於這個泛型類的函數。再次引述same section of the docs:
保存和刪除鉤:
由混入類提供下面的方法,以及提供該對象的容易壓倒一切的保存或刪除行爲。
perform_create(self, serializer)
- 保存新對象實例時調用CreateModelMixin
。
- ...
所以,perform_create
方法沒有除了提供一個簡單的方法來修改創建新對象時,會發生什麼目的。
謝謝。快速問題,「IsAdminOrIsSelf」的文檔在哪裏?我試着看這裏:http://www.django-rest-framework.org/api-guide/permissions/,它不在那裏。任何想法,我可以找到它?我最初通過「APIGuide」讀取「權限」來查找該權限,但沒有找到它,這是我決定發佈該問題的時間。 – user2719875
@ user2719875 - 你知道,我試圖找到一個完全相同的問題的答案,同時查看這個並找不到任何東西。我能做的最好的就是指向[源代碼](https://github.com/sebastibe/django-rest-skeleton/blob/master/api/users/permissions.py);這很簡單,也許這將是有用的。 – eykanal
我很難理解perform_create做什麼。 perform_create是視圖類的一種方法。它在「serializer.save()」(在視圖中)執行後立即調用。然後它會執行「serializer.save(owner = self.request.user)」。所有者現在傳遞給序列化器的「create()」方法,但爲什麼甚至需要?在文檔中的「與特定用戶關聯數據」部分中,create()方法甚至未被編輯爲使用owner參數。這不會引發一個錯誤,說「期望2個位置參數(request和validated_data),但給出了3個?」 – user2719875