mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-23 22:49:50 +03:00
added tests and added settings for default view name
This commit is contained in:
parent
9c72d2baad
commit
44a2f706cb
|
@ -7,6 +7,7 @@ from django.forms import widgets
|
|||
from django.utils.datastructures import SortedDict
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from rest_framework.compat import get_concrete_model
|
||||
from rest_framework.settings import api_settings
|
||||
|
||||
# Note: We do the following so that users of the framework can use this style:
|
||||
#
|
||||
|
@ -518,21 +519,17 @@ class HyperlinkedModelSerializerOptions(ModelSerializerOptions):
|
|||
"""
|
||||
def __init__(self, meta):
|
||||
super(HyperlinkedModelSerializerOptions, self).__init__(meta)
|
||||
self.view_name = getattr(meta, 'view_name', None)
|
||||
|
||||
|
||||
class HyperlinkedModelSerializer(ModelSerializer):
|
||||
"""
|
||||
"""
|
||||
_options_class = HyperlinkedModelSerializerOptions
|
||||
_default_view_name = '%(model_name)s-detail'
|
||||
_default_view_name = api_settings.DEFAULT_DETAIL_VIEW_NAME
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
if self.opts.view_name is None:
|
||||
self.opts.view_name = self._get_default_view_name(self.opts.model)
|
||||
|
||||
if not 'url' in self.base_fields:
|
||||
self.base_fields.insert(0, 'url', HyperlinkedIdentityField(view_name=self.opts.view_name))
|
||||
self.base_fields.insert(0, 'url', HyperlinkedIdentityField(view_name=self._get_default_view_name(self.opts.model)))
|
||||
|
||||
super(HyperlinkedModelSerializer, self).__init__(*args, **kwargs)
|
||||
|
||||
|
|
|
@ -74,6 +74,9 @@ DEFAULTS = {
|
|||
'URL_FORMAT_OVERRIDE': 'format',
|
||||
|
||||
'FORMAT_SUFFIX_KWARG': 'format',
|
||||
|
||||
# Hyperlinked Serializer
|
||||
'DEFAULT_DETAIL_VIEW_NAME': '%(model_name)s-detail',
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -16,6 +16,14 @@ class BlogPostCommentSerializer(serializers.ModelSerializer):
|
|||
model = BlogPostComment
|
||||
fields = ('text', 'blog_post_url', 'url')
|
||||
|
||||
class BlogPostCommentHyperlinkedSerializer(serializers.HyperlinkedModelSerializer):
|
||||
class Meta:
|
||||
model = BlogPostComment
|
||||
|
||||
class BlogPostCommentCustomViewHyperlinkedSerializer(serializers.HyperlinkedModelSerializer):
|
||||
_default_view_name = '%(model_name)s-detail-customized'
|
||||
class Meta:
|
||||
model = BlogPostComment
|
||||
|
||||
class PhotoSerializer(serializers.Serializer):
|
||||
description = serializers.CharField()
|
||||
|
@ -247,3 +255,20 @@ class TestOptionalRelationHyperlinkedView(TestCase):
|
|||
response = self.detail_view(request, pk=1).render()
|
||||
self.assertEquals(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEquals(response.data, self.data)
|
||||
|
||||
class TestHyperlinkedIdentityField(TestCase):
|
||||
|
||||
def test_view_name_mandatory(self):
|
||||
self.assertRaises(
|
||||
excClass=ValueError,
|
||||
callableObj=serializers.HyperlinkedIdentityField,
|
||||
msg = 'view-name should be mandatory'
|
||||
)
|
||||
|
||||
def test_hyperlinked_model_serializer(self):
|
||||
serializer = BlogPostCommentHyperlinkedSerializer()
|
||||
self.assertEquals(serializer.fields['url'].view_name, 'blogpostcomment-detail')
|
||||
|
||||
serializer = BlogPostCommentCustomViewHyperlinkedSerializer()
|
||||
self.assertEquals(serializer.fields['url'].view_name, 'blogpostcomment-detail-customized')
|
||||
|
Loading…
Reference in New Issue
Block a user