Tengo 2 vistas: /notes/ y /notes// En el modelo de notas en models.py Tengo una variable de propietario, que almacena el inicio de sesión del propietario. Como quiero tener muchos usuarios, no quiero que vean las notas de otros, así que creé el permiso:
class IsOwner(permissions.BasePermission): def has_object_permission(self, request, view, obj): return obj.owner == request.user Establecí este permiso en NotesList(generics.ListCreateAPIView) y NotesDetail(generics.RetrieveUpdateDestroyAPIView) . Ahora el usuario no puede ver las notas de otros si va a /notes/<pk>/ , pero en /notes/ puede ver la lista completa de todos modos. Entonces, ¿cómo puedo cambiarlo? Quiero ver en la lista de notas solo mis notas. Creo que la forma correcta es filtrar queryset = Snippet.objects.all().filter(owner=...) pero no puedo pensar de inmediato.
Tiene razón, debe anular el conjunto de consultas en la vista de lista. Pero no puede hacer eso en el atributo queryset en sí, porque se ejecuta al inicio del proceso, mientras que necesita acceso a datos que solo están disponibles en el momento de la solicitud. Por lo tanto, debe definir el método get_queryset en esa vista:
def get_queryset(self, *args, **kwargs): return Snippet.objects.all().filter(owner=self.request.user)