2017-04-19 73 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) 
相關問題