我有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=...)
,但不能马上思考。
答案 0 :(得分:7)
您是对的,您需要在列表视图中覆盖查询集。但是您无法在queryset
属性本身中执行此操作,因为这是在进程启动时执行的,而您需要访问仅在请求时可用的数据。因此,您需要在该视图中定义get_queryset
方法:
def get_queryset(self, *args, **kwargs):
return Snippet.objects.all().filter(owner=self.request.user)