查看仅当前用户对象的列表,Django REST

Mar*_*aev 2 python django

我有2个视图:/ notes /和/ notes //在models.py我有拥有者变量的笔记模型中,它存储了所有者的登录信息.因为我想拥有很多用户,所以我不希望他们看到其他人的笔记,所以我创建了权限:

class IsOwner(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        return obj.owner == request.user
Run Code Online (Sandbox Code Playgroud)

我将此权限设置为NotesList(generics.ListCreateAPIView)NotesDetail(generics.RetrieveUpdateDestroyAPIView).现在用户无法查看其他人的笔记/notes/<pk>/,但/notes/他仍然可以查看完整列表.那么,我该如何改变呢?我想在笔记列表中看到我的笔记.我认为正确的方法是过滤queryset = Snippet.objects.all().filter(owner=...)但不能马上思考.

Dan*_*man 9

您是对的,您需要在列表视图中覆盖查询集.但是你不能在queryset属性本身中这样做,因为它是在进程启动时执行的,而你需要访问仅在请求时可用的数据.所以你需要get_queryset在该视图中定义方法:

def get_queryset(self, *args, **kwargs):
     return Snippet.objects.all().filter(owner=self.request.user)
Run Code Online (Sandbox Code Playgroud)