mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-05 13:00:12 +03:00
fix url field representation
when lookup_field is a foreignkey, lookup_value should get from the referenced object's lookup_field(which is lookup_url_kwarg here) when lookup_value is None ,'' or not a string , HyperlinkedRelatedField should return None instead of http://foo/bar/None['', or just exception] for correct url reversing
This commit is contained in:
parent
637af1fc14
commit
e621ceddea
|
@ -201,6 +201,22 @@ class HyperlinkedRelatedField(RelatedField):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
lookup_value = getattr(obj, self.lookup_field)
|
lookup_value = getattr(obj, self.lookup_field)
|
||||||
|
|
||||||
|
import numbers
|
||||||
|
from django.utils import six
|
||||||
|
|
||||||
|
if lookup_value is not None and not isinstance(lookup_value, six.string_types) and not isinstance(lookup_value,
|
||||||
|
numbers.Number):
|
||||||
|
|
||||||
|
try:
|
||||||
|
lookup_value = getattr(lookup_value, self.lookup_url_kwarg)
|
||||||
|
except Exception:
|
||||||
|
lookup_value = getattr(lookup_value, 'pk')
|
||||||
|
|
||||||
|
if lookup_value is None or (not isinstance(lookup_value, six.string_types) and not isinstance(lookup_value,
|
||||||
|
numbers.Number)) or '' == lookup_value:
|
||||||
|
return None
|
||||||
|
|
||||||
kwargs = {self.lookup_url_kwarg: lookup_value}
|
kwargs = {self.lookup_url_kwarg: lookup_value}
|
||||||
return self.reverse(view_name, kwargs=kwargs, request=request, format=format)
|
return self.reverse(view_name, kwargs=kwargs, request=request, format=format)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user