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

时间:2017-04-19 13:09:10

标签: python django

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

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=...),但不能马上思考。

1 个答案:

答案 0 :(得分:7)

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

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