diff --git a/netbox/netbox/api/serializers/base.py b/netbox/netbox/api/serializers/base.py index 622e54a63..8115fe020 100644 --- a/netbox/netbox/api/serializers/base.py +++ b/netbox/netbox/api/serializers/base.py @@ -15,8 +15,8 @@ __all__ = ( class BaseModelSerializer(serializers.ModelSerializer): - url = NetBoxAPIHyperlinkedIdentityField(view_name="") - display_url = NetBoxURLHyperlinkedIdentityField(view_name="") + url = NetBoxAPIHyperlinkedIdentityField() + display_url = NetBoxURLHyperlinkedIdentityField() display = serializers.SerializerMethodField(read_only=True) def __init__(self, *args, nested=False, fields=None, **kwargs): diff --git a/netbox/netbox/api/serializers/fields.py b/netbox/netbox/api/serializers/fields.py index d03344bef..4fee36043 100644 --- a/netbox/netbox/api/serializers/fields.py +++ b/netbox/netbox/api/serializers/fields.py @@ -13,6 +13,9 @@ class BaseNetBoxHyperlinkedIdentityField(serializers.HyperlinkedIdentityField): and it will get replaced in the get_url call. Derived classes must define a get_view_name. """ + def __init__(self, *args, **kwargs): + super().__init__(view_name="", *args, **kwargs) + def get_url(self, obj, view_name, request, format): """ Given an object, return the URL that hyperlinks to the object. @@ -32,6 +35,11 @@ class BaseNetBoxHyperlinkedIdentityField(serializers.HyperlinkedIdentityField): view_name = self.get_view_name(app_name, model_name) return self.reverse(view_name, kwargs=kwargs, request=request, format=format) + def get_view_name(self, app_name, model_name): + raise NotImplementedError(_('{class_name} must implement get_view_name()').format( + class_name=self.__class__.__name__ + )) + class NetBoxAPIHyperlinkedIdentityField(BaseNetBoxHyperlinkedIdentityField):