2017-04-19 72 views
0

我有2个视图:/ notes/and/notes // 在models.py的备注模型中,我拥有所有者变量,用于存储所有者的登录信息。 因为我想有很多用户,我不希望他们看到别人的笔记,所以我创建权限:仅查看当前用户对象的列表,Django REST

class IsOwner(permissions.BasePermission): 
    def has_object_permission(self, request, view, obj): 
     return obj.owner == request.user 

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

回答

2

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

def get_queryset(self, *args, **kwargs): 
    return Snippet.objects.all().filter(owner=self.request.user) 
相关问题