diff --git a/netbox/circuits/api/serializers.py b/netbox/circuits/api/serializers.py index 68b26cff7..a670b2e01 100644 --- a/netbox/circuits/api/serializers.py +++ b/netbox/circuits/api/serializers.py @@ -21,6 +21,7 @@ class ProviderSerializer(CustomFieldSerializer, serializers.ModelSerializer): class NestedProviderSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provider-detail') class Meta: model = Provider @@ -39,6 +40,7 @@ class CircuitTypeSerializer(serializers.ModelSerializer): class NestedCircuitTypeSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittype-detail') class Meta: model = CircuitType @@ -76,6 +78,7 @@ class CircuitSerializer(CustomFieldSerializer, serializers.ModelSerializer): class NestedCircuitSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuit-detail') class Meta: model = Circuit diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index e7c9ab80d..0c256c1ad 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -28,6 +28,7 @@ class SiteSerializer(CustomFieldSerializer, serializers.ModelSerializer): class NestedSiteSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:site-detail') class Meta: model = Site @@ -47,6 +48,7 @@ class RackGroupSerializer(serializers.ModelSerializer): class NestedRackGroupSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackgroup-detail') class Meta: model = RackGroup @@ -65,6 +67,7 @@ class RackRoleSerializer(serializers.ModelSerializer): class NestedRackRoleSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackrole-detail') class Meta: model = RackRole @@ -91,6 +94,7 @@ class RackSerializer(CustomFieldSerializer, serializers.ModelSerializer): class NestedRackSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rack-detail') class Meta: model = Rack @@ -132,6 +136,7 @@ class ManufacturerSerializer(serializers.ModelSerializer): class NestedManufacturerSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:manufacturer-detail') class Meta: model = Manufacturer @@ -164,6 +169,8 @@ class DeviceTypeSerializer(CustomFieldSerializer, serializers.ModelSerializer): class NestedDeviceTypeSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicetype-detail') + manufacturer = NestedManufacturerSerializer() class Meta: model = DeviceType @@ -224,6 +231,7 @@ class DeviceRoleSerializer(serializers.ModelSerializer): class NestedDeviceRoleSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicerole-detail') class Meta: model = DeviceRole @@ -242,6 +250,7 @@ class PlatformSerializer(serializers.ModelSerializer): class NestedPlatformSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:platform-detail') class Meta: model = Platform @@ -254,6 +263,7 @@ class NestedPlatformSerializer(serializers.HyperlinkedModelSerializer): # Cannot import ipam.api.NestedIPAddressSerializer due to circular dependency class DeviceIPAddressSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail') class Meta: model = IPAddress @@ -295,6 +305,7 @@ class DeviceSerializer(CustomFieldSerializer, serializers.ModelSerializer): class NestedDeviceSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:device-detail') class Meta: model = Device @@ -314,6 +325,7 @@ class ConsoleServerPortSerializer(serializers.ModelSerializer): class DeviceConsoleServerPortSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:consoleserverport-detail') class Meta: model = ConsoleServerPort @@ -334,6 +346,7 @@ class ConsolePortSerializer(serializers.ModelSerializer): class DeviceConsolePortSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:consoleport-detail') class Meta: model = ConsolePort @@ -353,6 +366,7 @@ class PowerOutletSerializer(serializers.ModelSerializer): class DevicePowerOutletSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:poweroutlet-detail') class Meta: model = PowerOutlet @@ -373,6 +387,7 @@ class PowerPortSerializer(serializers.ModelSerializer): class DevicePowerPortSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerport-detail') class Meta: model = PowerPort @@ -408,6 +423,7 @@ class InterfaceSerializer(serializers.ModelSerializer): class PeerInterfaceSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interface-detail') device = NestedDeviceSerializer() class Meta: @@ -416,6 +432,7 @@ class PeerInterfaceSerializer(serializers.HyperlinkedModelSerializer): class DeviceInterfaceSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interface-detail') connection = serializers.SerializerMethodField() class Meta: @@ -442,6 +459,7 @@ class InterfaceConnectionSerializer(serializers.ModelSerializer): class NestedInterfaceConnectionSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interfaceconnection-detail') class Meta: model = InterfaceConnection @@ -461,7 +479,8 @@ class DeviceBaySerializer(serializers.ModelSerializer): fields = ['id', 'device', 'name', 'installed_device'] -class ChildDeviceBaySerializer(serializers.HyperlinkedModelSerializer): +class DeviceDeviceBaySerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicebay-detail') class Meta: model = DeviceBay @@ -481,7 +500,8 @@ class ModuleSerializer(serializers.ModelSerializer): fields = ['id', 'device', 'parent', 'name', 'manufacturer', 'part_id', 'serial', 'discovered'] -class ChildModuleSerializer(serializers.HyperlinkedModelSerializer): +class DeviceModuleSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:module-detail') class Meta: model = Module diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index 0ddc04b99..1dd26b73d 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -279,7 +279,7 @@ class DeviceBayViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, class DeviceDeviceBayViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet): - serializer_class = serializers.ChildDeviceBaySerializer + serializer_class = serializers.DeviceDeviceBaySerializer def get_queryset(self): device = get_object_or_404(Device, pk=self.kwargs['pk']) @@ -296,7 +296,7 @@ class ModuleViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, Wri class DeviceModuleViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet): - serializer_class = serializers.ChildModuleSerializer + serializer_class = serializers.DeviceModuleSerializer def get_queryset(self): device = get_object_or_404(Device, pk=self.kwargs['pk']) diff --git a/netbox/ipam/api/serializers.py b/netbox/ipam/api/serializers.py index 37b42af6c..d4f60340b 100644 --- a/netbox/ipam/api/serializers.py +++ b/netbox/ipam/api/serializers.py @@ -20,6 +20,7 @@ class VRFSerializer(CustomFieldSerializer, serializers.ModelSerializer): class NestedVRFSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vrf-detail') class Meta: model = VRF @@ -38,6 +39,7 @@ class RoleSerializer(serializers.ModelSerializer): class NestedRoleSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='ipam-api:role-detail') class Meta: model = Role @@ -56,6 +58,7 @@ class RIRSerializer(serializers.ModelSerializer): class NestedRIRSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='ipam-api:rir-detail') class Meta: model = RIR @@ -75,6 +78,7 @@ class AggregateSerializer(CustomFieldSerializer, serializers.ModelSerializer): class NestedAggregateSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='ipam-api:aggregate-detail') class Meta(AggregateSerializer.Meta): model = Aggregate @@ -94,6 +98,7 @@ class VLANGroupSerializer(WritableSerializerMixin, serializers.ModelSerializer): class NestedVLANGroupSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlangroup-detail') class Meta: model = VLANGroup @@ -119,6 +124,7 @@ class VLANSerializer(CustomFieldSerializer, serializers.ModelSerializer): class NestedVLANSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlan-detail') class Meta: model = VLAN @@ -145,6 +151,7 @@ class PrefixSerializer(CustomFieldSerializer, serializers.ModelSerializer): class NestedPrefixSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='ipam-api:prefix-detail') class Meta: model = Prefix @@ -169,6 +176,7 @@ class IPAddressSerializer(CustomFieldSerializer, serializers.ModelSerializer): class NestedIPAddressSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail') class Meta: model = IPAddress @@ -191,7 +199,8 @@ class ServiceSerializer(serializers.ModelSerializer): fields = ['id', 'device', 'name', 'port', 'protocol', 'ipaddresses', 'description'] -class ChildServiceSerializer(serializers.HyperlinkedModelSerializer): +class DeviceServiceSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='ipam-api:service-detail') ipaddresses = NestedIPAddressSerializer(many=True) class Meta: diff --git a/netbox/ipam/api/views.py b/netbox/ipam/api/views.py index aba741291..766acd97a 100644 --- a/netbox/ipam/api/views.py +++ b/netbox/ipam/api/views.py @@ -101,7 +101,7 @@ class ServiceViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, Wr class DeviceServiceViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet): - serializer_class = serializers.ChildServiceSerializer + serializer_class = serializers.DeviceServiceSerializer def get_queryset(self): device = get_object_or_404(Device, pk=self.kwargs['pk']) diff --git a/netbox/netbox/urls.py b/netbox/netbox/urls.py index fe6fff333..9042e0a62 100644 --- a/netbox/netbox/urls.py +++ b/netbox/netbox/urls.py @@ -26,11 +26,11 @@ _patterns = [ url(r'^profile/', include('users.urls', namespace='users')), # API - url(r'^api/circuits/', include('circuits.api.urls')), - url(r'^api/dcim/', include('dcim.api.urls')), - url(r'^api/ipam/', include('ipam.api.urls')), - url(r'^api/secrets/', include('secrets.api.urls')), - url(r'^api/tenancy/', include('tenancy.api.urls')), + url(r'^api/circuits/', include('circuits.api.urls', namespace='circuits-api')), + url(r'^api/dcim/', include('dcim.api.urls', namespace='dcim-api')), + url(r'^api/ipam/', include('ipam.api.urls', namespace='ipam-api')), + url(r'^api/secrets/', include('secrets.api.urls', namespace='secrets-api')), + url(r'^api/tenancy/', include('tenancy.api.urls', namespace='tenancy-api')), url(r'^api-auth/', include('rest_framework.urls')), # Error testing diff --git a/netbox/secrets/api/serializers.py b/netbox/secrets/api/serializers.py index 40c024e1c..a6ed6ed8c 100644 --- a/netbox/secrets/api/serializers.py +++ b/netbox/secrets/api/serializers.py @@ -16,6 +16,7 @@ class SecretRoleSerializer(serializers.ModelSerializer): class NestedSecretRoleSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='secrets-api:secretrole-detail') class Meta: model = SecretRole diff --git a/netbox/tenancy/api/serializers.py b/netbox/tenancy/api/serializers.py index afd634129..4091e5261 100644 --- a/netbox/tenancy/api/serializers.py +++ b/netbox/tenancy/api/serializers.py @@ -16,6 +16,7 @@ class TenantGroupSerializer(serializers.ModelSerializer): class NestedTenantGroupSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenantgroup-detail') class Meta: model = TenantGroup @@ -35,6 +36,7 @@ class TenantSerializer(CustomFieldSerializer, serializers.ModelSerializer): class NestedTenantSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenant-detail') class Meta: model = Tenant