Skip to content

Commit 70d566a

Browse files
committed
Prevent empty querysets to raises AssertionError.
1 parent 0ca1145 commit 70d566a

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

rest_framework/permissions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def has_permission(self, request, view):
114114
if queryset is None and getattr(view, '_ignore_model_permissions', False):
115115
return True
116116

117-
assert queryset, (
117+
assert queryset is not None, (
118118
'Cannot apply DjangoModelPermissions on a view that '
119119
'does not have `.queryset` property.'
120120
)

tests/test_permissions.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,16 @@ class InstanceView(generics.RetrieveUpdateDestroyAPIView):
3131
authentication_classes = [authentication.BasicAuthentication]
3232
permission_classes = [permissions.DjangoModelPermissions]
3333

34+
class EmptyListView(generics.ListCreateAPIView):
35+
queryset = BasicModel.objects.none()
36+
serializer_class = BasicSerializer
37+
authentication_classes = [authentication.BasicAuthentication]
38+
permission_classes = [permissions.DjangoModelPermissions]
39+
40+
3441
root_view = RootView.as_view()
3542
instance_view = InstanceView.as_view()
43+
empty_list_view = EmptyListView.as_view()
3644

3745

3846
def basic_auth_header(username, password):
@@ -149,6 +157,11 @@ def test_options_updateonly(self):
149157
self.assertIn('actions', response.data)
150158
self.assertEqual(list(response.data['actions'].keys()), ['PUT'])
151159

160+
def test_empty_view_does_not_assert(self):
161+
request = factory.get('/1', HTTP_AUTHORIZATION=self.permitted_credentials)
162+
response = empty_list_view(request, pk=1)
163+
self.assertEqual(response.status_code, status.HTTP_200_OK)
164+
152165

153166
class BasicPermModel(models.Model):
154167
text = models.CharField(max_length=100)

0 commit comments

Comments
 (0)