完成此操作的代码实际上位于文档页面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