From ff7725f05e8ca624e54d707f7c655e3d5c8b8888 Mon Sep 17 00:00:00 2001 From: Stephan Groß Date: Wed, 31 Oct 2012 15:30:01 +0100 Subject: added support for custom slug field and kwargs without subclassing HyperlinkedRelatedField and overwriting slug_url_kwarg and slug_field there is no possibility to use other fields / arguments. now you can do something like this: url(r'^users/(?P\w[\w-]*)$', UserInstance.as_view(), name='user-detail') class ProjectSerializer(serializers.HyperlinkedModelSerializer): created_by = serializers.HyperlinkedRelatedField(view_name='user-detail', slug_url_kwargs='username', slug_field='username') --- rest_framework/fields.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'rest_framework/fields.py') diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 1d6d760e..63e15923 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -342,6 +342,8 @@ class HyperlinkedRelatedField(RelatedField): self.view_name = kwargs.pop('view_name') except: raise ValueError("Hyperlinked field requires 'view_name' kwarg") + self.slug_url_kwarg = kwargs.pop('slug_url_kwargs', self.slug_url_kwarg) + self.slug_field = kwargs.pop('slug_field', self.slug_field) self.format = kwargs.pop('format', None) super(HyperlinkedRelatedField, self).__init__(*args, **kwargs) -- cgit v1.2.3 From 03095f607a4f110c1dc831a394f6b480a691f1fd Mon Sep 17 00:00:00 2001 From: Stephan Groß Date: Mon, 5 Nov 2012 16:37:37 +0100 Subject: added testcase for custom slug field in hyperlinkedrelatedfield --- rest_framework/fields.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'rest_framework/fields.py') diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 2185cf34..305b7562 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -493,6 +493,12 @@ class HyperlinkedRelatedField(RelatedField): self.format = kwargs.pop('format', None) super(HyperlinkedRelatedField, self).__init__(*args, **kwargs) + def get_slug_field(self): + """ + Get the name of a slug field to be used to look up by slug. + """ + return self.slug_field + def to_native(self, obj): view_name = self.view_name request = self.context.get('request', None) -- cgit v1.2.3 From 0a660a531af67dba0b42fbe2de09e50e83572e09 Mon Sep 17 00:00:00 2001 From: Stephan Groß Date: Mon, 5 Nov 2012 16:43:03 +0100 Subject: fixed typo --- rest_framework/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'rest_framework/fields.py') diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 305b7562..734a7551 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -488,7 +488,7 @@ class HyperlinkedRelatedField(RelatedField): self.view_name = kwargs.pop('view_name') except: raise ValueError("Hyperlinked field requires 'view_name' kwarg") - self.slug_url_kwarg = kwargs.pop('slug_url_kwargs', self.slug_url_kwarg) + self.slug_url_kwarg = kwargs.pop('slug_url_kwarg', self.slug_url_kwarg) self.slug_field = kwargs.pop('slug_field', self.slug_field) self.format = kwargs.pop('format', None) super(HyperlinkedRelatedField, self).__init__(*args, **kwargs) -- cgit v1.2.3