diff --git a/rest_framework/permissions.py b/rest_framework/permissions.py index 22ca2f812..de4ebedb6 100644 --- a/rest_framework/permissions.py +++ b/rest_framework/permissions.py @@ -120,7 +120,7 @@ class DjangoModelPermissions(BasePermission): if queryset is None and getattr(view, '_ignore_model_permissions', False): return True - assert queryset, ( + assert queryset is not None, ( 'Cannot apply DjangoModelPermissions on a view that ' 'does not have `.queryset` property.' ) diff --git a/tests/test_permissions.py b/tests/test_permissions.py index 223100a78..9225308c7 100644 --- a/tests/test_permissions.py +++ b/tests/test_permissions.py @@ -41,9 +41,17 @@ class GetQuerySetListView(generics.ListCreateAPIView): return BasicModel.objects.all() +class EmptyListView(generics.ListCreateAPIView): + queryset = BasicModel.objects.none() + serializer_class = BasicSerializer + authentication_classes = [authentication.BasicAuthentication] + permission_classes = [permissions.DjangoModelPermissions] + + root_view = RootView.as_view() instance_view = InstanceView.as_view() get_queryset_list_view = GetQuerySetListView.as_view() +empty_list_view = EmptyListView.as_view() def basic_auth_header(username, password): @@ -166,6 +174,11 @@ class ModelPermissionsIntegrationTests(TestCase): self.assertIn('actions', response.data) self.assertEqual(list(response.data['actions'].keys()), ['PUT']) + def test_empty_view_does_not_assert(self): + request = factory.get('/1', HTTP_AUTHORIZATION=self.permitted_credentials) + response = empty_list_view(request, pk=1) + self.assertEqual(response.status_code, status.HTTP_200_OK) + class BasicPermModel(models.Model): text = models.CharField(max_length=100)