diff --git a/tests/browsable_api/no_auth_urls.py b/tests/browsable_api/no_auth_urls.py
index 5e3604a66..bcbe06532 100644
--- a/tests/browsable_api/no_auth_urls.py
+++ b/tests/browsable_api/no_auth_urls.py
@@ -1,9 +1,10 @@
from __future__ import unicode_literals
from django.conf.urls import patterns
-from .views import MockView
+from .views import MockView, CreateOnlyView
urlpatterns = patterns(
'',
(r'^$', MockView.as_view()),
+ (r'^create/$', CreateOnlyView.as_view()),
)
diff --git a/tests/browsable_api/test_browsable_api.py b/tests/browsable_api/test_browsable_api.py
index 5f2647838..229dec17f 100644
--- a/tests/browsable_api/test_browsable_api.py
+++ b/tests/browsable_api/test_browsable_api.py
@@ -63,3 +63,11 @@ class NoDropdownWithoutAuthTests(TestCase):
def test_dropdown_not_shown_when_logged_out(self):
response = self.client.get('/')
self.assertNotContains(response, '
')
+
+
+class CreatOnlyModelTests(TestCase):
+ urls = 'tests.browsable_api.no_auth_urls'
+
+ def test_create_only_model(self):
+ with self.assertRaises(AssertionError):
+ self.client.post('/create/', {'text': 'creating'})
diff --git a/tests/browsable_api/views.py b/tests/browsable_api/views.py
index 000f4e804..6e6cf4eea 100644
--- a/tests/browsable_api/views.py
+++ b/tests/browsable_api/views.py
@@ -3,8 +3,12 @@ from __future__ import unicode_literals
from rest_framework.views import APIView
from rest_framework import authentication
from rest_framework import renderers
+from rest_framework import generics
+from rest_framework import serializers
from rest_framework.response import Response
+from tests.models import BasicModel
+
class MockView(APIView):
@@ -13,3 +17,19 @@ class MockView(APIView):
def get(self, request):
return Response({'a': 1, 'b': 2, 'c': 3})
+
+
+class CreateOnlySerializer(serializers.ModelSerializer):
+ def restore_object(self, attrs, instance=None):
+ assert instance is None, 'Cannot update models with this serializer'
+ return super(CreateOnlySerializer, self).restore_object(attrs, instance=instance)
+
+ class Meta:
+ model = BasicModel
+
+
+class CreateOnlyView(generics.ListCreateAPIView):
+ authentication_classes = (authentication.SessionAuthentication,)
+ renderer_classes = (renderers.BrowsableAPIRenderer,)
+ serializer_class = CreateOnlySerializer
+ model = BasicModel