code: def get_url(self, obj, view_name, request, format):
          
          # Unsaved objects will not yet have a valid URL.
          if hasattr(obj, 'pk') and obj.pk in (None, ''):
              return None
  
          # default lookup from rest_framework.relations.HyperlinkedRelatedField
          lookup_value = getattr(obj, self.lookup_field)
          kwargs = {self.lookup_url_kwarg: lookup_value}
  
          # multi-level lookup
          for parent_lookup_kwarg in list(self.parent_lookup_kwargs.keys()):
              underscored_lookup = self.parent_lookup_kwargs[parent_lookup_kwarg]
  
              # split each lookup by their __, e.g. "parent__pk" will be split into "parent" and "pk", or
              # "parent__super__pk" would be split into "parent", "super" and "pk"
              lookups = underscored_lookup.split('__')
  
              # use the Django ORM to lookup this value, e.g., obj.parent.pk
              lookup_value = reduce(getattr, [obj] + lookups)
  
              # store the lookup_name and value in kwargs, which is later passed to the reverse method
              kwargs.update({parent_lookup_kwarg: lookup_value})
  
          return self.reverse(view_name, kwargs=kwargs, request=request, format=format)
docs: Given an object, return the URL that hyperlinks to the object.
  
          May raise a `NoReverseMatch` if the `view_name` and `lookup_field`
          attributes are not configured to correctly match the URL conf.