mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-26 19:43:59 +03:00
lookup_field on hyperlink serializers
This commit is contained in:
parent
2d44dc3f54
commit
538d2e35e7
|
@ -360,7 +360,15 @@ class HyperlinkedRelatedField(RelatedField):
|
||||||
# Only try slug if it corresponds to an attribute on the object.
|
# Only try slug if it corresponds to an attribute on the object.
|
||||||
kwargs = {self.slug_url_kwarg: slug}
|
kwargs = {self.slug_url_kwarg: slug}
|
||||||
try:
|
try:
|
||||||
return reverse(view_name, kwargs=kwargs, request=request, format=format)
|
ret = reverse(view_name, kwargs=kwargs, request=request, format=format)
|
||||||
|
if self.slug_field == 'slug' and self.slug_url_kwarg == 'slug':
|
||||||
|
# If the lookup succeeds using the default slug params,
|
||||||
|
# then `slug_field` is being used implicitly, and we
|
||||||
|
# we need to warn about the pending deprecation.
|
||||||
|
msg = 'Implicit slug field hyperlinked fields are pending deprecation.' \
|
||||||
|
'You should set `lookup_field=slug` on the HyperlinkedRelatedField.'
|
||||||
|
warnings.warn(msg, PendingDeprecationWarning, stacklevel=2)
|
||||||
|
return ret
|
||||||
except NoReverseMatch:
|
except NoReverseMatch:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -827,6 +827,7 @@ class HyperlinkedModelSerializerOptions(ModelSerializerOptions):
|
||||||
def __init__(self, meta):
|
def __init__(self, meta):
|
||||||
super(HyperlinkedModelSerializerOptions, self).__init__(meta)
|
super(HyperlinkedModelSerializerOptions, self).__init__(meta)
|
||||||
self.view_name = getattr(meta, 'view_name', None)
|
self.view_name = getattr(meta, 'view_name', None)
|
||||||
|
self.lookup_field = getattr(meta, 'slug_field', None)
|
||||||
|
|
||||||
|
|
||||||
class HyperlinkedModelSerializer(ModelSerializer):
|
class HyperlinkedModelSerializer(ModelSerializer):
|
||||||
|
@ -875,6 +876,9 @@ class HyperlinkedModelSerializer(ModelSerializer):
|
||||||
if model_field:
|
if model_field:
|
||||||
kwargs['required'] = not(model_field.null or model_field.blank)
|
kwargs['required'] = not(model_field.null or model_field.blank)
|
||||||
|
|
||||||
|
if self.opts.lookup_field:
|
||||||
|
kwargs['lookup_field'] = self.opts.lookup_field
|
||||||
|
|
||||||
return self._hyperlink_field_class(**kwargs)
|
return self._hyperlink_field_class(**kwargs)
|
||||||
|
|
||||||
def get_identity(self, data):
|
def get_identity(self, data):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user