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:
hippp 2015-02-11 17:27:04 +08:00
parent 637af1fc14
commit e621ceddea

View File

@ -201,6 +201,22 @@ class HyperlinkedRelatedField(RelatedField):
return None
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}
return self.reverse(view_name, kwargs=kwargs, request=request, format=format)