Fixes: #17492 - Change methods on NetBox*HyperlinkedIdentityField to use get_viewname

This commit is contained in:
Daniel Sheppard 2024-09-13 12:39:10 -05:00 committed by Jeremy Stretch
parent bdf182ffd6
commit 893adef79c

View File

@ -1,5 +1,8 @@
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers from rest_framework import serializers
from utilities.views import get_viewname
__all__ = ( __all__ = (
'NetBoxAPIHyperlinkedIdentityField', 'NetBoxAPIHyperlinkedIdentityField',
'NetBoxURLHyperlinkedIdentityField', 'NetBoxURLHyperlinkedIdentityField',
@ -30,12 +33,10 @@ class BaseNetBoxHyperlinkedIdentityField(serializers.HyperlinkedIdentityField):
lookup_value = getattr(obj, self.lookup_field) lookup_value = getattr(obj, self.lookup_field)
kwargs = {self.lookup_url_kwarg: lookup_value} kwargs = {self.lookup_url_kwarg: lookup_value}
model_name = self.parent.Meta.model._meta.model_name view_name = self.get_view_name(obj)
app_name = self.parent.Meta.model._meta.app_label
view_name = self.get_view_name(app_name, model_name)
return self.reverse(view_name, kwargs=kwargs, request=request, format=format) return self.reverse(view_name, kwargs=kwargs, request=request, format=format)
def get_view_name(self, app_name, model_name): def get_view_name(self, model):
raise NotImplementedError(_('{class_name} must implement get_view_name()').format( raise NotImplementedError(_('{class_name} must implement get_view_name()').format(
class_name=self.__class__.__name__ class_name=self.__class__.__name__
)) ))
@ -43,11 +44,11 @@ class BaseNetBoxHyperlinkedIdentityField(serializers.HyperlinkedIdentityField):
class NetBoxAPIHyperlinkedIdentityField(BaseNetBoxHyperlinkedIdentityField): class NetBoxAPIHyperlinkedIdentityField(BaseNetBoxHyperlinkedIdentityField):
def get_view_name(self, app_name, model_name): def get_view_name(self, model):
return f'{app_name}-api:{model_name}-detail' return get_viewname(model=model, action='detail', rest_api=True)
class NetBoxURLHyperlinkedIdentityField(BaseNetBoxHyperlinkedIdentityField): class NetBoxURLHyperlinkedIdentityField(BaseNetBoxHyperlinkedIdentityField):
def get_view_name(self, app_name, model_name): def get_view_name(self, model):
return f'{app_name}:{model_name}' return get_viewname(model=model)