              raise exceptions.MethodNotAllowed(method)
  
          return [perm % kwargs for perm in self.perms_map[method]]
  
      def has_permission(self, request, view):
          # Workaround to ensure DjangoModelPermissions are not applied
          # to the root view when using DefaultRouter.
          if getattr(view, '_ignore_model_permissions', False):
              return True
  
 
</s> remove         if hasattr(view, 'get_queryset'):
            queryset = view.get_queryset()
            assert queryset is not None, (
                '{}.get_queryset() returned None'.format(view.__class__.__name__)
            )
        else:
            queryset = getattr(view, 'queryset', None)

        assert queryset is not None, (
            'Cannot apply DjangoModelPermissions on a view that '
            'does not set `.queryset` or have a `.get_queryset()` method.'
        )

 </s> add         queryset = self._queryset(view) </s> remove         if hasattr(view, 'get_queryset'):
            queryset = view.get_queryset()
        else:
            queryset = getattr(view, 'queryset', None)

        assert queryset is not None, (
            'Cannot apply DjangoObjectPermissions on a view that '
            'does not set `.queryset` or have a `.get_queryset()` method.'
        )

 </s> add         # authentication checks have already executed via has_permission
        queryset = self._queryset(view) </s> remove     status
 </s> add     status, views
    def _queryset(self, view):
        assert hasattr(view, 'get_queryset') \
            or getattr(view, 'queryset', None) is not None, (
            'Cannot apply {} on a view that does not set '
            '`.queryset` or have a `.get_queryset()` method.'
        ).format(self.__class__.__name__)

        if hasattr(view, 'get_queryset'):
            queryset = view.get_queryset()
            assert queryset is not None, (
                '{}.get_queryset() returned None'.format(view.__class__.__name__)
            )
            return queryset
        return view.queryset

              raise exceptions.MethodNotAllowed(method)
  
          return [perm % kwargs for perm in self.perms_map[method]]
  
    def _queryset(self, view):
        assert hasattr(view, 'get_queryset') \
            or getattr(view, 'queryset', None) is not None, (
            'Cannot apply {} on a view that does not set '
            '`.queryset` or have a `.get_queryset()` method.'
        ).format(self.__class__.__name__)

        if hasattr(view, 'get_queryset'):
            queryset = view.get_queryset()
            assert queryset is not None, (
                '{}.get_queryset() returned None'.format(view.__class__.__name__)
            )
            return queryset
        return view.queryset

      def has_permission(self, request, view):
          # Workaround to ensure DjangoModelPermissions are not applied
          # to the root view when using DefaultRouter.
          if getattr(view, '_ignore_model_permissions', False):
              return True
  
keep keep keep add keep keep keep keep keep keep
 Unify QS handling for model/object permissions 
rest_framework/permissions.py