15156 add url display_url to base class

This commit is contained in:
Arthur 2024-06-10 15:24:52 -07:00
parent cdbb816095
commit 8b80b5e1cd
61 changed files with 34 additions and 492 deletions

View File

@ -27,7 +27,7 @@ Serializers are responsible for converting Python objects to JSON data suitable
#### Example
To create a serializer for a plugin model, subclass `NetBoxModelSerializer` in `api/serializers.py`. Specify the model class and the fields to include within the serializer's `Meta` class. It is generally advisable to include a `url` attribute on each serializer. This will render the direct link to access the object being rendered.
To create a serializer for a plugin model, subclass `NetBoxModelSerializer` in `api/serializers.py`. Specify the model class and the fields to include within the serializer's `Meta` class.
```python
# api/serializers.py
@ -36,12 +36,7 @@ from netbox.api.serializers import NetBoxModelSerializer
from my_plugin.models import MyModel
class MyModelSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='plugins-api:myplugin-api:mymodel-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='plugins:myplugin:mymodel'
)
foo = SiteSerializer(nested=True, allow_null=True)
class Meta:
model = MyModel
@ -66,12 +61,7 @@ from netbox.api.serializers import WritableNestedSerializer
from my_plugin.models import MyModel
class NestedMyModelSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='plugins-api:myplugin-api:mymodel-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='plugins:myplugin:mymodel'
)
foo = SiteSerializer(nested=True, allow_null=True)
class Meta:
model = MyModel

View File

@ -20,8 +20,6 @@ __all__ = [
#
class NestedProviderNetworkSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:providernetwork-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:providernetwork')
class Meta:
model = ProviderNetwork
@ -36,8 +34,6 @@ class NestedProviderNetworkSerializer(WritableNestedSerializer):
exclude_fields=('circuit_count',),
)
class NestedProviderSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provider-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:provider')
circuit_count = RelatedObjectCountField('circuits')
class Meta:
@ -50,8 +46,6 @@ class NestedProviderSerializer(WritableNestedSerializer):
#
class NestedProviderAccountSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provideraccount-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:provideraccount')
class Meta:
model = ProviderAccount
@ -66,8 +60,6 @@ class NestedProviderAccountSerializer(WritableNestedSerializer):
exclude_fields=('circuit_count',),
)
class NestedCircuitTypeSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittype-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:circuittype')
circuit_count = RelatedObjectCountField('circuits')
class Meta:
@ -76,8 +68,6 @@ class NestedCircuitTypeSerializer(WritableNestedSerializer):
class NestedCircuitSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuit-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:circuit')
class Meta:
model = Circuit
@ -85,8 +75,6 @@ class NestedCircuitSerializer(WritableNestedSerializer):
class NestedCircuitTerminationSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittermination-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:circuittermination')
circuit = NestedCircuitSerializer()
class Meta:

View File

@ -18,8 +18,6 @@ __all__ = (
class CircuitTypeSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittype-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:circuittype')
# Related object counts
circuit_count = RelatedObjectCountField('circuits')
@ -34,8 +32,6 @@ class CircuitTypeSerializer(NetBoxModelSerializer):
class CircuitCircuitTerminationSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittermination-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:circuittermination')
site = SiteSerializer(nested=True, allow_null=True)
provider_network = ProviderNetworkSerializer(nested=True, allow_null=True)
@ -48,8 +44,6 @@ class CircuitCircuitTerminationSerializer(WritableNestedSerializer):
class CircuitSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuit-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:circuit')
provider = ProviderSerializer(nested=True)
provider_account = ProviderAccountSerializer(nested=True, required=False, allow_null=True, default=None)
status = ChoiceField(choices=CircuitStatusChoices, required=False)
@ -69,8 +63,6 @@ class CircuitSerializer(NetBoxModelSerializer):
class CircuitTerminationSerializer(NetBoxModelSerializer, CabledObjectSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittermination-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:circuittermination')
circuit = CircuitSerializer(nested=True)
site = SiteSerializer(nested=True, required=False, allow_null=True)
provider_network = ProviderNetworkSerializer(nested=True, required=False, allow_null=True)

View File

@ -15,8 +15,6 @@ __all__ = (
class ProviderSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provider-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:provider')
accounts = SerializedPKRelatedField(
queryset=ProviderAccount.objects.all(),
serializer=NestedProviderAccountSerializer,
@ -44,8 +42,6 @@ class ProviderSerializer(NetBoxModelSerializer):
class ProviderAccountSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provideraccount-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:provideraccount')
provider = ProviderSerializer(nested=True)
name = serializers.CharField(allow_blank=True, max_length=100, required=False, default='')
@ -59,8 +55,6 @@ class ProviderAccountSerializer(NetBoxModelSerializer):
class ProviderNetworkSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:providernetwork-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='circuits:providernetwork')
provider = ProviderSerializer(nested=True)
class Meta:

View File

@ -14,8 +14,6 @@ __all__ = (
class NestedDataSourceSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='core-api:datasource-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='core:datasource')
class Meta:
model = DataSource
@ -23,8 +21,6 @@ class NestedDataSourceSerializer(WritableNestedSerializer):
class NestedDataFileSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='core-api:datafile-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='core:datafile')
class Meta:
model = DataFile
@ -32,8 +28,6 @@ class NestedDataFileSerializer(WritableNestedSerializer):
class NestedJobSerializer(serializers.ModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='core-api:job-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='core:job')
status = ChoiceField(choices=JobStatusChoices)
user = UserSerializer(
nested=True,

View File

@ -13,12 +13,6 @@ __all__ = (
class DataSourceSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='core-api:datasource-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='core:datasource'
)
type = ChoiceField(
choices=get_data_backend_choices()
)
@ -40,12 +34,6 @@ class DataSourceSerializer(NetBoxModelSerializer):
class DataFileSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='core-api:datafile-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='core:datafile'
)
source = DataSourceSerializer(
nested=True,
read_only=True

View File

@ -12,8 +12,6 @@ __all__ = (
class JobSerializer(BaseModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='core-api:job-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='core:job')
user = UserSerializer(
nested=True,
read_only=True

View File

@ -57,8 +57,6 @@ __all__ = [
exclude_fields=('site_count',),
)
class NestedRegionSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:region-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:region')
site_count = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)
@ -71,8 +69,6 @@ class NestedRegionSerializer(WritableNestedSerializer):
exclude_fields=('site_count',),
)
class NestedSiteGroupSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:sitegroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:sitegroup')
site_count = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)
@ -82,8 +78,6 @@ class NestedSiteGroupSerializer(WritableNestedSerializer):
class NestedSiteSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:site-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:site')
class Meta:
model = models.Site
@ -98,8 +92,6 @@ class NestedSiteSerializer(WritableNestedSerializer):
exclude_fields=('rack_count',),
)
class NestedLocationSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:location-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:location')
rack_count = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)
@ -112,8 +104,6 @@ class NestedLocationSerializer(WritableNestedSerializer):
exclude_fields=('rack_count',),
)
class NestedRackRoleSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackrole-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:rackrole')
rack_count = RelatedObjectCountField('racks')
class Meta:
@ -125,8 +115,6 @@ class NestedRackRoleSerializer(WritableNestedSerializer):
exclude_fields=('device_count',),
)
class NestedRackSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rack-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:rack')
device_count = RelatedObjectCountField('devices')
class Meta:
@ -135,8 +123,6 @@ class NestedRackSerializer(WritableNestedSerializer):
class NestedRackReservationSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackreservation-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:rackreservation')
user = serializers.SerializerMethodField(read_only=True)
class Meta:
@ -155,8 +141,6 @@ class NestedRackReservationSerializer(WritableNestedSerializer):
exclude_fields=('devicetype_count',),
)
class NestedManufacturerSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:manufacturer-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:manufacturer')
devicetype_count = RelatedObjectCountField('device_types')
class Meta:
@ -168,8 +152,6 @@ class NestedManufacturerSerializer(WritableNestedSerializer):
exclude_fields=('device_count',),
)
class NestedDeviceTypeSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicetype-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:devicetype')
manufacturer = NestedManufacturerSerializer(read_only=True)
device_count = RelatedObjectCountField('instances')
@ -179,8 +161,6 @@ class NestedDeviceTypeSerializer(WritableNestedSerializer):
class NestedModuleTypeSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:moduletype-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:moduletype')
manufacturer = NestedManufacturerSerializer(read_only=True)
class Meta:
@ -193,8 +173,6 @@ class NestedModuleTypeSerializer(WritableNestedSerializer):
#
class NestedConsolePortTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:consoleporttemplate-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
class Meta:
model = models.ConsolePortTemplate
@ -202,8 +180,6 @@ class NestedConsolePortTemplateSerializer(WritableNestedSerializer):
class NestedConsoleServerPortTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:consoleserverporttemplate-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
class Meta:
model = models.ConsoleServerPortTemplate
@ -211,8 +187,6 @@ class NestedConsoleServerPortTemplateSerializer(WritableNestedSerializer):
class NestedPowerPortTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerporttemplate-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
class Meta:
model = models.PowerPortTemplate
@ -220,8 +194,6 @@ class NestedPowerPortTemplateSerializer(WritableNestedSerializer):
class NestedPowerOutletTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:poweroutlettemplate-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
class Meta:
model = models.PowerOutletTemplate
@ -229,8 +201,6 @@ class NestedPowerOutletTemplateSerializer(WritableNestedSerializer):
class NestedInterfaceTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interfacetemplate-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
class Meta:
model = models.InterfaceTemplate
@ -238,8 +208,6 @@ class NestedInterfaceTemplateSerializer(WritableNestedSerializer):
class NestedRearPortTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearporttemplate-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
class Meta:
model = models.RearPortTemplate
@ -247,8 +215,6 @@ class NestedRearPortTemplateSerializer(WritableNestedSerializer):
class NestedFrontPortTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontporttemplate-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
class Meta:
model = models.FrontPortTemplate
@ -256,8 +222,6 @@ class NestedFrontPortTemplateSerializer(WritableNestedSerializer):
class NestedModuleBayTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:modulebaytemplate-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
class Meta:
model = models.ModuleBayTemplate
@ -265,8 +229,6 @@ class NestedModuleBayTemplateSerializer(WritableNestedSerializer):
class NestedDeviceBayTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicebaytemplate-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
class Meta:
model = models.DeviceBayTemplate
@ -274,8 +236,6 @@ class NestedDeviceBayTemplateSerializer(WritableNestedSerializer):
class NestedInventoryItemTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:inventoryitemtemplate-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)
class Meta:
@ -291,8 +251,6 @@ class NestedInventoryItemTemplateSerializer(WritableNestedSerializer):
exclude_fields=('device_count', 'virtualmachine_count'),
)
class NestedDeviceRoleSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicerole-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:devicerole')
device_count = RelatedObjectCountField('devices')
virtualmachine_count = RelatedObjectCountField('virtual_machines')
@ -305,8 +263,6 @@ class NestedDeviceRoleSerializer(WritableNestedSerializer):
exclude_fields=('device_count', 'virtualmachine_count'),
)
class NestedPlatformSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:platform-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:platform')
device_count = RelatedObjectCountField('devices')
virtualmachine_count = RelatedObjectCountField('virtual_machines')
@ -316,8 +272,6 @@ class NestedPlatformSerializer(WritableNestedSerializer):
class NestedDeviceSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:device-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:device')
class Meta:
model = models.Device
@ -325,8 +279,6 @@ class NestedDeviceSerializer(WritableNestedSerializer):
class ModuleNestedModuleBaySerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:modulebay-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:modulebay')
class Meta:
model = models.ModuleBay
@ -334,8 +286,6 @@ class ModuleNestedModuleBaySerializer(WritableNestedSerializer):
class ModuleBayNestedModuleSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:module-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:module')
class Meta:
model = models.Module
@ -343,8 +293,6 @@ class ModuleBayNestedModuleSerializer(WritableNestedSerializer):
class NestedModuleSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:module-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:module')
device = NestedDeviceSerializer(read_only=True)
module_bay = ModuleNestedModuleBaySerializer(read_only=True)
module_type = NestedModuleTypeSerializer(read_only=True)
@ -355,8 +303,6 @@ class NestedModuleSerializer(WritableNestedSerializer):
class NestedConsoleServerPortSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:consoleserverport-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:consoleserverport')
device = NestedDeviceSerializer(read_only=True)
_occupied = serializers.BooleanField(required=False, read_only=True)
@ -366,8 +312,6 @@ class NestedConsoleServerPortSerializer(WritableNestedSerializer):
class NestedConsolePortSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:consoleport-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:consoleport')
device = NestedDeviceSerializer(read_only=True)
_occupied = serializers.BooleanField(required=False, read_only=True)
@ -377,8 +321,6 @@ class NestedConsolePortSerializer(WritableNestedSerializer):
class NestedPowerOutletSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:poweroutlet-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:poweroutlet')
device = NestedDeviceSerializer(read_only=True)
_occupied = serializers.BooleanField(required=False, read_only=True)
@ -388,8 +330,6 @@ class NestedPowerOutletSerializer(WritableNestedSerializer):
class NestedPowerPortSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerport-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:powerport')
device = NestedDeviceSerializer(read_only=True)
_occupied = serializers.BooleanField(required=False, read_only=True)
@ -400,8 +340,6 @@ class NestedPowerPortSerializer(WritableNestedSerializer):
class NestedInterfaceSerializer(WritableNestedSerializer):
device = NestedDeviceSerializer(read_only=True)
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interface-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:interface')
_occupied = serializers.BooleanField(required=False, read_only=True)
class Meta:
@ -411,8 +349,6 @@ class NestedInterfaceSerializer(WritableNestedSerializer):
class NestedRearPortSerializer(WritableNestedSerializer):
device = NestedDeviceSerializer(read_only=True)
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearport-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:rearport')
_occupied = serializers.BooleanField(required=False, read_only=True)
class Meta:
@ -422,8 +358,6 @@ class NestedRearPortSerializer(WritableNestedSerializer):
class NestedFrontPortSerializer(WritableNestedSerializer):
device = NestedDeviceSerializer(read_only=True)
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontport-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:frontport')
_occupied = serializers.BooleanField(required=False, read_only=True)
class Meta:
@ -432,8 +366,6 @@ class NestedFrontPortSerializer(WritableNestedSerializer):
class NestedModuleBaySerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:modulebay-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:modulebay')
installed_module = ModuleBayNestedModuleSerializer(required=False, allow_null=True)
class Meta:
@ -442,8 +374,6 @@ class NestedModuleBaySerializer(WritableNestedSerializer):
class NestedDeviceBaySerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicebay-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:devicebay')
device = NestedDeviceSerializer(read_only=True)
class Meta:
@ -452,8 +382,6 @@ class NestedDeviceBaySerializer(WritableNestedSerializer):
class NestedInventoryItemSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:inventoryitem-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:inventoryitem')
device = NestedDeviceSerializer(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)
@ -466,8 +394,6 @@ class NestedInventoryItemSerializer(WritableNestedSerializer):
exclude_fields=('inventoryitem_count',),
)
class NestedInventoryItemRoleSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:inventoryitemrole-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:inventoryitemrole')
inventoryitem_count = RelatedObjectCountField('inventory_items')
class Meta:
@ -480,8 +406,6 @@ class NestedInventoryItemRoleSerializer(WritableNestedSerializer):
#
class NestedCableSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:cable-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:cable')
class Meta:
model = models.Cable
@ -496,8 +420,6 @@ class NestedCableSerializer(WritableNestedSerializer):
exclude_fields=('member_count',),
)
class NestedVirtualChassisSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:virtualchassis-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:virtualchassis')
master = NestedDeviceSerializer()
member_count = serializers.IntegerField(read_only=True)
@ -514,8 +436,6 @@ class NestedVirtualChassisSerializer(WritableNestedSerializer):
exclude_fields=('powerfeed_count',),
)
class NestedPowerPanelSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerpanel-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:powerpanel')
powerfeed_count = RelatedObjectCountField('powerfeeds')
class Meta:
@ -524,8 +444,6 @@ class NestedPowerPanelSerializer(WritableNestedSerializer):
class NestedPowerFeedSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerfeed-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:powerfeed')
_occupied = serializers.BooleanField(required=False, read_only=True)
class Meta:
@ -534,8 +452,6 @@ class NestedPowerFeedSerializer(WritableNestedSerializer):
class NestedVirtualDeviceContextSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:virtualdevicecontext-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:virtualdevicecontext')
device = NestedDeviceSerializer()
class Meta:

View File

@ -21,8 +21,6 @@ __all__ = (
class CableSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:cable-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:cable')
a_terminations = GenericObjectSerializer(many=True, required=False)
b_terminations = GenericObjectSerializer(many=True, required=False)
status = ChoiceField(choices=LinkStatusChoices, required=False)
@ -54,7 +52,6 @@ class TracedCableSerializer(serializers.ModelSerializer):
class CableTerminationSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:cabletermination-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
termination_type = ContentTypeField(
queryset=ContentType.objects.filter(CABLE_TERMINATION_MODELS)

View File

@ -41,8 +41,6 @@ __all__ = (
class ConsoleServerPortSerializer(NetBoxModelSerializer, CabledObjectSerializer, ConnectedEndpointsSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:consoleserverport-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:consoleserverport')
device = DeviceSerializer(nested=True)
module = ModuleSerializer(
nested=True,
@ -73,8 +71,6 @@ class ConsoleServerPortSerializer(NetBoxModelSerializer, CabledObjectSerializer,
class ConsolePortSerializer(NetBoxModelSerializer, CabledObjectSerializer, ConnectedEndpointsSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:consoleport-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:consoleport')
device = DeviceSerializer(nested=True)
module = ModuleSerializer(
nested=True,
@ -105,8 +101,6 @@ class ConsolePortSerializer(NetBoxModelSerializer, CabledObjectSerializer, Conne
class PowerPortSerializer(NetBoxModelSerializer, CabledObjectSerializer, ConnectedEndpointsSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerport-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:powerport')
device = DeviceSerializer(nested=True)
module = ModuleSerializer(
nested=True,
@ -133,8 +127,6 @@ class PowerPortSerializer(NetBoxModelSerializer, CabledObjectSerializer, Connect
class PowerOutletSerializer(NetBoxModelSerializer, CabledObjectSerializer, ConnectedEndpointsSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:poweroutlet-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:poweroutlet')
device = DeviceSerializer(nested=True)
module = ModuleSerializer(
nested=True,
@ -172,8 +164,6 @@ class PowerOutletSerializer(NetBoxModelSerializer, CabledObjectSerializer, Conne
class InterfaceSerializer(NetBoxModelSerializer, CabledObjectSerializer, ConnectedEndpointsSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interface-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:interface')
device = DeviceSerializer(nested=True)
vdcs = SerializedPKRelatedField(
queryset=VirtualDeviceContext.objects.all(),
@ -255,8 +245,6 @@ class InterfaceSerializer(NetBoxModelSerializer, CabledObjectSerializer, Connect
class RearPortSerializer(NetBoxModelSerializer, CabledObjectSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearport-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:rearport')
device = DeviceSerializer(nested=True)
module = ModuleSerializer(
nested=True,
@ -280,8 +268,6 @@ class FrontPortRearPortSerializer(WritableNestedSerializer):
"""
NestedRearPortSerializer but with parent device omitted (since front and rear ports must belong to same device)
"""
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearport-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:rearport')
class Meta:
model = RearPort
@ -289,8 +275,6 @@ class FrontPortRearPortSerializer(WritableNestedSerializer):
class FrontPortSerializer(NetBoxModelSerializer, CabledObjectSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontport-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:frontport')
device = DeviceSerializer(nested=True)
module = ModuleSerializer(
nested=True,
@ -312,8 +296,6 @@ class FrontPortSerializer(NetBoxModelSerializer, CabledObjectSerializer):
class ModuleBaySerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:modulebay-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:modulebay')
device = DeviceSerializer(nested=True)
installed_module = ModuleSerializer(
nested=True,
@ -332,8 +314,6 @@ class ModuleBaySerializer(NetBoxModelSerializer):
class DeviceBaySerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicebay-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:devicebay')
device = DeviceSerializer(nested=True)
installed_device = DeviceSerializer(nested=True, required=False, allow_null=True)
@ -347,8 +327,6 @@ class DeviceBaySerializer(NetBoxModelSerializer):
class InventoryItemSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:inventoryitem-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:inventoryitem')
device = DeviceSerializer(nested=True)
parent = serializers.PrimaryKeyRelatedField(queryset=InventoryItem.objects.all(), allow_null=True, default=None)
role = InventoryItemRoleSerializer(nested=True, required=False, allow_null=True)

View File

@ -29,8 +29,6 @@ __all__ = (
class DeviceSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:device-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:device')
device_type = DeviceTypeSerializer(nested=True)
role = DeviceRoleSerializer(nested=True)
tenant = TenantSerializer(
@ -121,8 +119,6 @@ class DeviceWithConfigContextSerializer(DeviceSerializer):
class VirtualDeviceContextSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:virtualdevicecontext-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:virtualdevicecontext')
device = DeviceSerializer(nested=True)
identifier = serializers.IntegerField(allow_null=True, max_value=32767, min_value=0, required=False, default=None)
tenant = TenantSerializer(nested=True, required=False, allow_null=True, default=None)
@ -145,8 +141,6 @@ class VirtualDeviceContextSerializer(NetBoxModelSerializer):
class ModuleSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:module-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:module')
device = DeviceSerializer(nested=True)
module_bay = NestedModuleBaySerializer()
module_type = ModuleTypeSerializer(nested=True)

View File

@ -17,8 +17,6 @@ __all__ = (
class DeviceTypeSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicetype-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:devicetype')
manufacturer = ManufacturerSerializer(nested=True)
default_platform = PlatformSerializer(nested=True, required=False, allow_null=True)
u_height = serializers.DecimalField(
@ -64,8 +62,6 @@ class DeviceTypeSerializer(NetBoxModelSerializer):
class ModuleTypeSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:moduletype-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:moduletype')
manufacturer = ManufacturerSerializer(nested=True)
weight_unit = ChoiceField(choices=WeightUnitChoices, allow_blank=True, required=False, allow_null=True)

View File

@ -10,8 +10,6 @@ __all__ = (
class ManufacturerSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:manufacturer-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:manufacturer')
# Related object counts
devicetype_count = RelatedObjectCountField('device_types')

View File

@ -12,8 +12,6 @@ __all__ = (
class PlatformSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:platform-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:platform')
manufacturer = ManufacturerSerializer(nested=True, required=False, allow_null=True)
config_template = ConfigTemplateSerializer(nested=True, required=False, allow_null=True, default=None)

View File

@ -17,8 +17,6 @@ __all__ = (
class PowerPanelSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerpanel-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:powerpanel')
site = SiteSerializer(nested=True)
location = LocationSerializer(
nested=True,
@ -40,8 +38,6 @@ class PowerPanelSerializer(NetBoxModelSerializer):
class PowerFeedSerializer(NetBoxModelSerializer, CabledObjectSerializer, ConnectedEndpointsSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerfeed-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:powerfeed')
power_panel = PowerPanelSerializer(nested=True)
rack = RackSerializer(
nested=True,

View File

@ -20,8 +20,6 @@ __all__ = (
class RackRoleSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackrole-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:rackrole')
# Related object counts
rack_count = RelatedObjectCountField('racks')
@ -36,8 +34,6 @@ class RackRoleSerializer(NetBoxModelSerializer):
class RackSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rack-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:rack')
site = SiteSerializer(nested=True)
location = LocationSerializer(nested=True, required=False, allow_null=True, default=None)
tenant = TenantSerializer(nested=True, required=False, allow_null=True)
@ -66,8 +62,6 @@ class RackSerializer(NetBoxModelSerializer):
class RackReservationSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackreservation-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:rackreservation')
rack = RackSerializer(nested=True)
user = UserSerializer(nested=True)
tenant = TenantSerializer(nested=True, required=False, allow_null=True)

View File

@ -12,8 +12,6 @@ __all__ = (
class DeviceRoleSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicerole-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:devicerole')
config_template = ConfigTemplateSerializer(nested=True, required=False, allow_null=True, default=None)
# Related object counts
@ -30,8 +28,6 @@ class DeviceRoleSerializer(NetBoxModelSerializer):
class InventoryItemRoleSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:inventoryitemrole-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:inventoryitemrole')
# Related object counts
inventoryitem_count = RelatedObjectCountField('inventory_items')

View File

@ -19,8 +19,6 @@ __all__ = (
class RegionSerializer(NestedGroupModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:region-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:region')
parent = NestedRegionSerializer(required=False, allow_null=True, default=None)
site_count = serializers.IntegerField(read_only=True, default=0)
@ -34,8 +32,6 @@ class RegionSerializer(NestedGroupModelSerializer):
class SiteGroupSerializer(NestedGroupModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:sitegroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:sitegroup')
parent = NestedSiteGroupSerializer(required=False, allow_null=True, default=None)
site_count = serializers.IntegerField(read_only=True, default=0)
@ -49,8 +45,6 @@ class SiteGroupSerializer(NestedGroupModelSerializer):
class SiteSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:site-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:site')
status = ChoiceField(choices=SiteStatusChoices, required=False)
region = RegionSerializer(nested=True, required=False, allow_null=True)
group = SiteGroupSerializer(nested=True, required=False, allow_null=True)
@ -84,8 +78,6 @@ class SiteSerializer(NetBoxModelSerializer):
class LocationSerializer(NestedGroupModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:location-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:location')
site = SiteSerializer(nested=True)
parent = NestedLocationSerializer(required=False, allow_null=True, default=None)
status = ChoiceField(choices=LocationStatusChoices, required=False)

View File

@ -10,8 +10,6 @@ __all__ = (
class VirtualChassisSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:virtualchassis-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='dcim:virtualchassis')
master = NestedDeviceSerializer(required=False, allow_null=True, default=None)
members = NestedDeviceSerializer(many=True, read_only=True)

View File

@ -22,8 +22,6 @@ __all__ = [
class NestedEventRuleSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:eventrule-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:eventrule')
class Meta:
model = models.EventRule
@ -31,8 +29,6 @@ class NestedEventRuleSerializer(WritableNestedSerializer):
class NestedWebhookSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:webhook-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:webhook')
class Meta:
model = models.Webhook
@ -40,8 +36,6 @@ class NestedWebhookSerializer(WritableNestedSerializer):
class NestedCustomFieldSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:customfield-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:customfield')
class Meta:
model = models.CustomField
@ -49,8 +43,6 @@ class NestedCustomFieldSerializer(WritableNestedSerializer):
class NestedCustomFieldChoiceSetSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:customfieldchoiceset-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:customfieldchoiceset')
class Meta:
model = models.CustomFieldChoiceSet
@ -58,8 +50,6 @@ class NestedCustomFieldChoiceSetSerializer(WritableNestedSerializer):
class NestedCustomLinkSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:customlink-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:customlink')
class Meta:
model = models.CustomLink
@ -67,8 +57,6 @@ class NestedCustomLinkSerializer(WritableNestedSerializer):
class NestedConfigContextSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:configcontext-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:configcontext')
class Meta:
model = models.ConfigContext
@ -76,8 +64,6 @@ class NestedConfigContextSerializer(WritableNestedSerializer):
class NestedConfigTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:configtemplate-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:configtemplate')
class Meta:
model = models.ConfigTemplate
@ -85,8 +71,6 @@ class NestedConfigTemplateSerializer(WritableNestedSerializer):
class NestedExportTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:exporttemplate-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:exporttemplate')
class Meta:
model = models.ExportTemplate
@ -94,8 +78,6 @@ class NestedExportTemplateSerializer(WritableNestedSerializer):
class NestedSavedFilterSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:savedfilter-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:savedfilter')
class Meta:
model = models.SavedFilter
@ -103,7 +85,6 @@ class NestedSavedFilterSerializer(WritableNestedSerializer):
class NestedBookmarkSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:bookmark-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
class Meta:
@ -112,7 +93,6 @@ class NestedBookmarkSerializer(WritableNestedSerializer):
class NestedImageAttachmentSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:imageattachment-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
class Meta:
@ -121,8 +101,6 @@ class NestedImageAttachmentSerializer(WritableNestedSerializer):
class NestedJournalEntrySerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:journalentry-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:journalentry')
class Meta:
model = models.JournalEntry

View File

@ -14,7 +14,6 @@ __all__ = (
class ImageAttachmentSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:imageattachment-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
object_type = ContentTypeField(
queryset=ObjectType.objects.all()

View File

@ -14,7 +14,6 @@ __all__ = (
class BookmarkSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:bookmark-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
object_type = ContentTypeField(
queryset=ObjectType.objects.with_feature('bookmarks'),

View File

@ -15,8 +15,6 @@ __all__ = (
class ObjectChangeSerializer(BaseModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:objectchange-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:objectchange')
user = UserSerializer(
nested=True,
read_only=True

View File

@ -20,8 +20,6 @@ __all__ = (
class ConfigContextSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:configcontext-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:configcontext')
regions = SerializedPKRelatedField(
queryset=Region.objects.all(),
serializer=RegionSerializer,

View File

@ -11,8 +11,6 @@ __all__ = (
class ConfigTemplateSerializer(TaggableModelSerializer, ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:configtemplate-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:configtemplate')
data_source = DataSourceSerializer(
nested=True,
required=False

View File

@ -16,8 +16,6 @@ __all__ = (
class CustomFieldChoiceSetSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:customfieldchoiceset-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:customfieldchoiceset')
base_choices = ChoiceField(
choices=CustomFieldChoiceSetBaseChoices,
required=False
@ -39,8 +37,6 @@ class CustomFieldChoiceSetSerializer(ValidatedModelSerializer):
class CustomFieldSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:customfield-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:customfield')
object_types = ContentTypeField(
queryset=ObjectType.objects.with_feature('custom_fields'),
many=True

View File

@ -11,8 +11,6 @@ __all__ = (
class CustomLinkSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:customlink-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:customlink')
object_types = ContentTypeField(
queryset=ObjectType.objects.with_feature('custom_links'),
many=True

View File

@ -21,8 +21,6 @@ __all__ = (
#
class EventRuleSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:eventrule-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:eventrule')
object_types = ContentTypeField(
queryset=ObjectType.objects.with_feature('event_rules'),
many=True
@ -59,8 +57,6 @@ class EventRuleSerializer(NetBoxModelSerializer):
#
class WebhookSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:webhook-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:webhook')
class Meta:
model = Webhook

View File

@ -12,8 +12,6 @@ __all__ = (
class ExportTemplateSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:exporttemplate-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:exporttemplate')
object_types = ContentTypeField(
queryset=ObjectType.objects.with_feature('export_templates'),
many=True

View File

@ -16,8 +16,6 @@ __all__ = (
class JournalEntrySerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:journalentry-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:journalentry')
assigned_object_type = ContentTypeField(
queryset=ObjectType.objects.all()
)

View File

@ -9,7 +9,6 @@ __all__ = (
class ObjectTypeSerializer(BaseModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:objecttype-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
class Meta:

View File

@ -11,8 +11,6 @@ __all__ = (
class SavedFilterSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:savedfilter-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:savedfilter')
object_types = ContentTypeField(
queryset=ObjectType.objects.all(),
many=True

View File

@ -14,8 +14,6 @@ __all__ = (
class ScriptSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:script-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:script')
description = serializers.SerializerMethodField(read_only=True)
vars = serializers.SerializerMethodField(read_only=True)
result = JobSerializer(nested=True, read_only=True)

View File

@ -11,8 +11,6 @@ __all__ = (
class TagSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:tag-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:tag')
object_types = ContentTypeField(
queryset=ObjectType.objects.with_feature('tags'),
many=True,

View File

@ -31,8 +31,6 @@ __all__ = [
#
class NestedASNRangeSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:asnrange-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:asnrange')
class Meta:
model = models.ASNRange
@ -44,8 +42,6 @@ class NestedASNRangeSerializer(WritableNestedSerializer):
#
class NestedASNSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:asn-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:asn')
class Meta:
model = models.ASN
@ -60,8 +56,6 @@ class NestedASNSerializer(WritableNestedSerializer):
exclude_fields=('prefix_count',),
)
class NestedVRFSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vrf-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:vrf')
prefix_count = RelatedObjectCountField('prefixes')
class Meta:
@ -74,8 +68,6 @@ class NestedVRFSerializer(WritableNestedSerializer):
#
class NestedRouteTargetSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:routetarget-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:routetarget')
class Meta:
model = models.RouteTarget
@ -90,8 +82,6 @@ class NestedRouteTargetSerializer(WritableNestedSerializer):
exclude_fields=('aggregate_count',),
)
class NestedRIRSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:rir-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:rir')
aggregate_count = RelatedObjectCountField('aggregates')
class Meta:
@ -100,8 +90,6 @@ class NestedRIRSerializer(WritableNestedSerializer):
class NestedAggregateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:aggregate-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:aggregate')
family = serializers.IntegerField(read_only=True)
class Meta:
@ -114,8 +102,6 @@ class NestedAggregateSerializer(WritableNestedSerializer):
#
class NestedFHRPGroupSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:fhrpgroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:fhrpgroup')
class Meta:
model = models.FHRPGroup
@ -123,8 +109,6 @@ class NestedFHRPGroupSerializer(WritableNestedSerializer):
class NestedFHRPGroupAssignmentSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:fhrpgroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:fhrpgroup')
group = NestedFHRPGroupSerializer()
class Meta:
@ -140,8 +124,6 @@ class NestedFHRPGroupAssignmentSerializer(WritableNestedSerializer):
exclude_fields=('prefix_count', 'vlan_count'),
)
class NestedRoleSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:role-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:role')
prefix_count = RelatedObjectCountField('prefixes')
vlan_count = RelatedObjectCountField('vlans')
@ -154,8 +136,6 @@ class NestedRoleSerializer(WritableNestedSerializer):
exclude_fields=('vlan_count',),
)
class NestedVLANGroupSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlangroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:vlangroup')
vlan_count = RelatedObjectCountField('vlans')
class Meta:
@ -164,8 +144,6 @@ class NestedVLANGroupSerializer(WritableNestedSerializer):
class NestedVLANSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlan-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:vlan')
class Meta:
model = models.VLAN
@ -177,8 +155,6 @@ class NestedVLANSerializer(WritableNestedSerializer):
#
class NestedPrefixSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:prefix-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:prefix')
family = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(read_only=True)
@ -192,8 +168,6 @@ class NestedPrefixSerializer(WritableNestedSerializer):
#
class NestedIPRangeSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:iprange-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:iprange')
family = serializers.IntegerField(read_only=True)
start_address = IPAddressField()
end_address = IPAddressField()
@ -208,8 +182,6 @@ class NestedIPRangeSerializer(WritableNestedSerializer):
#
class NestedIPAddressSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:ipaddress')
family = serializers.IntegerField(read_only=True)
address = IPAddressField()
@ -223,8 +195,6 @@ class NestedIPAddressSerializer(WritableNestedSerializer):
#
class NestedServiceTemplateSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:servicetemplate-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:servicetemplate')
class Meta:
model = models.ServiceTemplate
@ -232,8 +202,6 @@ class NestedServiceTemplateSerializer(WritableNestedSerializer):
class NestedServiceSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:service-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:service')
class Meta:
model = models.Service

View File

@ -14,8 +14,6 @@ __all__ = (
class RIRSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:rir-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:rir')
# Related object counts
aggregate_count = RelatedObjectCountField('aggregates')
@ -30,8 +28,6 @@ class RIRSerializer(NetBoxModelSerializer):
class ASNRangeSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:asnrange-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:asnrange')
rir = RIRSerializer(nested=True)
tenant = TenantSerializer(nested=True, required=False, allow_null=True)
asn_count = serializers.IntegerField(read_only=True)
@ -46,8 +42,6 @@ class ASNRangeSerializer(NetBoxModelSerializer):
class ASNSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:asn-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:asn')
rir = RIRSerializer(nested=True, required=False, allow_null=True)
tenant = TenantSerializer(nested=True, required=False, allow_null=True)

View File

@ -15,8 +15,6 @@ __all__ = (
class FHRPGroupSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:fhrpgroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:fhrpgroup')
ip_addresses = IPAddressSerializer(nested=True, many=True, read_only=True)
class Meta:
@ -29,7 +27,6 @@ class FHRPGroupSerializer(NetBoxModelSerializer):
class FHRPGroupAssignmentSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:fhrpgroupassignment-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
group = FHRPGroupSerializer(nested=True)
interface_type = ContentTypeField(

View File

@ -29,8 +29,6 @@ __all__ = (
class AggregateSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:aggregate-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:aggregate')
family = ChoiceField(choices=IPAddressFamilyChoices, read_only=True)
rir = RIRSerializer(nested=True)
tenant = TenantSerializer(nested=True, required=False, allow_null=True)
@ -46,8 +44,6 @@ class AggregateSerializer(NetBoxModelSerializer):
class PrefixSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:prefix-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:prefix')
family = ChoiceField(choices=IPAddressFamilyChoices, read_only=True)
site = SiteSerializer(nested=True, required=False, allow_null=True)
vrf = VRFSerializer(nested=True, required=False, allow_null=True)
@ -121,8 +117,6 @@ class AvailablePrefixSerializer(serializers.Serializer):
#
class IPRangeSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:iprange-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:iprange')
family = ChoiceField(choices=IPAddressFamilyChoices, read_only=True)
start_address = IPAddressField()
end_address = IPAddressField()
@ -146,8 +140,6 @@ class IPRangeSerializer(NetBoxModelSerializer):
#
class IPAddressSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:ipaddress')
family = ChoiceField(choices=IPAddressFamilyChoices, read_only=True)
address = IPAddressField()
vrf = VRFSerializer(nested=True, required=False, allow_null=True)

View File

@ -10,8 +10,6 @@ __all__ = (
class RoleSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:role-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:role')
# Related object counts
prefix_count = RelatedObjectCountField('prefixes')

View File

@ -15,8 +15,6 @@ __all__ = (
class ServiceTemplateSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:servicetemplate-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:servicetemplate')
protocol = ChoiceField(choices=ServiceProtocolChoices, required=False)
class Meta:
@ -29,8 +27,6 @@ class ServiceTemplateSerializer(NetBoxModelSerializer):
class ServiceSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:service-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:service')
device = DeviceSerializer(nested=True, required=False, allow_null=True)
virtual_machine = VirtualMachineSerializer(nested=True, required=False, allow_null=True)
protocol = ChoiceField(choices=ServiceProtocolChoices, required=False)

View File

@ -22,8 +22,6 @@ __all__ = (
class VLANGroupSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlangroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:vlangroup')
scope_type = ContentTypeField(
queryset=ContentType.objects.filter(
model__in=VLANGROUP_SCOPE_TYPES
@ -58,8 +56,6 @@ class VLANGroupSerializer(NetBoxModelSerializer):
class VLANSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlan-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:vlan')
site = SiteSerializer(nested=True, required=False, allow_null=True)
group = VLANGroupSerializer(nested=True, required=False, allow_null=True, default=None)
tenant = TenantSerializer(nested=True, required=False, allow_null=True)

View File

@ -12,8 +12,6 @@ __all__ = (
class RouteTargetSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:routetarget-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:routetarget')
tenant = TenantSerializer(nested=True, required=False, allow_null=True)
class Meta:
@ -26,8 +24,6 @@ class RouteTargetSerializer(NetBoxModelSerializer):
class VRFSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vrf-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='ipam:vrf')
tenant = TenantSerializer(nested=True, required=False, allow_null=True)
import_targets = SerializedPKRelatedField(
queryset=RouteTarget.objects.all(),

View File

@ -13,7 +13,27 @@ __all__ = (
)
class NetBoxApiHyperlinkedIdentityField(serializers.HyperlinkedIdentityField):
def __init__(self, model, **kwargs):
model_name = model._meta.model_name
app_name = model._meta.app_label
view_name = f'{app_name}-api:{model_name}-detail'
super().__init__(view_name, **kwargs)
class NetBoxUrlHyperlinkedIdentityField(serializers.HyperlinkedIdentityField):
def __init__(self, model, **kwargs):
model_name = model._meta.model_name
app_name = model._meta.app_label
view_name = f'{app_name}:{model_name}'
super().__init__(view_name, **kwargs)
class BaseModelSerializer(serializers.ModelSerializer):
url = serializers.RelatedField(read_only=True)
display_url = serializers.RelatedField(read_only=True)
display = serializers.SerializerMethodField(read_only=True)
def __init__(self, *args, nested=False, fields=None, **kwargs):
@ -36,6 +56,17 @@ class BaseModelSerializer(serializers.ModelSerializer):
if self.nested and not fields:
self._requested_fields = getattr(self.Meta, 'brief_fields', None)
# don't override the field if the class already defines these so can set lookup_field
if (
"url" in self.fields and not isinstance(self.fields["url"], serializers.HyperlinkedIdentityField) and
isinstance(self.fields["url"], serializers.RelatedField)):
self.fields["url"] = NetBoxApiHyperlinkedIdentityField(self.Meta.model)
if (
"display_url" in self.fields and not
isinstance(self.fields["display_url"], serializers.HyperlinkedIdentityField) and
isinstance(self.fields["display_url"], serializers.RelatedField)):
self.fields["display_url"] = NetBoxUrlHyperlinkedIdentityField(self.Meta.model)
super().__init__(*args, **kwargs)
def to_internal_value(self, data):

View File

@ -23,8 +23,6 @@ class WritableNestedSerializer(BaseModelSerializer):
# Declared here for use by PrimaryModelSerializer, but should be imported from extras.api.nested_serializers
class NestedTagSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='extras-api:tag-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='extras:tag')
class Meta:
model = Tag

View File

@ -22,8 +22,6 @@ __all__ = [
exclude_fields=('tenant_count',),
)
class NestedTenantGroupSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenantgroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='tenancy:tenantgroup')
tenant_count = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)
@ -33,8 +31,6 @@ class NestedTenantGroupSerializer(WritableNestedSerializer):
class NestedTenantSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenant-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='tenancy:tenant')
class Meta:
model = Tenant
@ -49,8 +45,6 @@ class NestedTenantSerializer(WritableNestedSerializer):
exclude_fields=('contact_count',),
)
class NestedContactGroupSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:contactgroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='tenancy:contactgroup')
contact_count = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)
@ -60,8 +54,6 @@ class NestedContactGroupSerializer(WritableNestedSerializer):
class NestedContactRoleSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:contactrole-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='tenancy:contactrole')
class Meta:
model = ContactRole
@ -69,8 +61,6 @@ class NestedContactRoleSerializer(WritableNestedSerializer):
class NestedContactSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:contact-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='tenancy:contact')
class Meta:
model = Contact
@ -78,7 +68,6 @@ class NestedContactSerializer(WritableNestedSerializer):
class NestedContactAssignmentSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:contactassignment-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
contact = NestedContactSerializer()
role = NestedContactRoleSerializer

View File

@ -19,8 +19,6 @@ __all__ = (
class ContactGroupSerializer(NestedGroupModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:contactgroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='tenancy:contactgroup')
parent = NestedContactGroupSerializer(required=False, allow_null=True, default=None)
contact_count = serializers.IntegerField(read_only=True, default=0)
@ -34,8 +32,6 @@ class ContactGroupSerializer(NestedGroupModelSerializer):
class ContactRoleSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:contactrole-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='tenancy:contactrole')
class Meta:
model = ContactRole
@ -47,8 +43,6 @@ class ContactRoleSerializer(NetBoxModelSerializer):
class ContactSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:contact-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='tenancy:contact')
group = ContactGroupSerializer(nested=True, required=False, allow_null=True, default=None)
class Meta:
@ -61,7 +55,6 @@ class ContactSerializer(NetBoxModelSerializer):
class ContactAssignmentSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:contactassignment-detail')
display_url = serializers.CharField(allow_null=True, read_only=True)
object_type = ContentTypeField(
queryset=ContentType.objects.all()

View File

@ -12,8 +12,6 @@ __all__ = (
class TenantGroupSerializer(NestedGroupModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenantgroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='tenancy:tenantgroup')
parent = NestedTenantGroupSerializer(required=False, allow_null=True)
tenant_count = serializers.IntegerField(read_only=True, default=0)
@ -27,8 +25,6 @@ class TenantGroupSerializer(NestedGroupModelSerializer):
class TenantSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenant-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='tenancy:tenant')
group = TenantGroupSerializer(nested=True, required=False, allow_null=True, default=None)
# Related object counts

View File

@ -17,8 +17,6 @@ __all__ = [
class NestedGroupSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='users-api:group-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='users:group')
class Meta:
model = Group
@ -26,8 +24,6 @@ class NestedGroupSerializer(WritableNestedSerializer):
class NestedUserSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='users-api:user-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='users:user')
class Meta:
model = get_user_model()
@ -41,8 +37,6 @@ class NestedUserSerializer(WritableNestedSerializer):
class NestedTokenSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='users-api:token-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='users:token')
class Meta:
model = Token
@ -50,8 +44,6 @@ class NestedTokenSerializer(WritableNestedSerializer):
class NestedObjectPermissionSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='users-api:objectpermission-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='users:objectpermission')
object_types = ContentTypeField(
queryset=ObjectType.objects.all(),
many=True

View File

@ -12,8 +12,6 @@ __all__ = (
class ObjectPermissionSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='users-api:objectpermission-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='users:objectpermission')
object_types = ContentTypeField(
queryset=ObjectType.objects.all(),
many=True

View File

@ -15,8 +15,6 @@ __all__ = (
class TokenSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='users-api:token-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='users:token')
key = serializers.CharField(
min_length=40,
max_length=40,

View File

@ -15,8 +15,6 @@ __all__ = (
class GroupSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='users-api:group-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='users:group')
user_count = serializers.IntegerField(read_only=True)
permissions = SerializedPKRelatedField(
source='object_permissions',
@ -34,8 +32,6 @@ class GroupSerializer(ValidatedModelSerializer):
class UserSerializer(ValidatedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='users-api:user-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='users:user')
groups = SerializedPKRelatedField(
queryset=Group.objects.all(),
serializer=GroupSerializer,

View File

@ -23,8 +23,6 @@ __all__ = [
exclude_fields=('cluster_count',),
)
class NestedClusterTypeSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustertype-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='virtualization:clustertype')
cluster_count = RelatedObjectCountField('clusters')
class Meta:
@ -36,8 +34,6 @@ class NestedClusterTypeSerializer(WritableNestedSerializer):
exclude_fields=('cluster_count',),
)
class NestedClusterGroupSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustergroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='virtualization:clustergroup')
cluster_count = RelatedObjectCountField('clusters')
class Meta:
@ -49,8 +45,6 @@ class NestedClusterGroupSerializer(WritableNestedSerializer):
exclude_fields=('virtualmachine_count',),
)
class NestedClusterSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:cluster-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='virtualization:cluster')
virtualmachine_count = RelatedObjectCountField('virtual_machines')
class Meta:
@ -63,8 +57,6 @@ class NestedClusterSerializer(WritableNestedSerializer):
#
class NestedVirtualMachineSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:virtualmachine-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='virtualization:virtualmachine')
class Meta:
model = VirtualMachine
@ -72,8 +64,6 @@ class NestedVirtualMachineSerializer(WritableNestedSerializer):
class NestedVMInterfaceSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:vminterface-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='virtualization:vminterface')
virtual_machine = NestedVirtualMachineSerializer(read_only=True)
class Meta:
@ -82,8 +72,6 @@ class NestedVMInterfaceSerializer(WritableNestedSerializer):
class NestedVirtualDiskSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:virtualdisk-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='virtualization:virtualdisk')
virtual_machine = NestedVirtualMachineSerializer(read_only=True)
class Meta:

View File

@ -15,8 +15,6 @@ __all__ = (
class ClusterTypeSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustertype-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='virtualization:clustertype')
# Related object counts
cluster_count = RelatedObjectCountField('clusters')
@ -31,8 +29,6 @@ class ClusterTypeSerializer(NetBoxModelSerializer):
class ClusterGroupSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustergroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='virtualization:clustergroup')
# Related object counts
cluster_count = RelatedObjectCountField('clusters')
@ -47,8 +43,6 @@ class ClusterGroupSerializer(NetBoxModelSerializer):
class ClusterSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:cluster-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='virtualization:cluster')
type = ClusterTypeSerializer(nested=True)
group = ClusterGroupSerializer(nested=True, required=False, allow_null=True, default=None)
status = ChoiceField(choices=ClusterStatusChoices, required=False)

View File

@ -29,8 +29,6 @@ __all__ = (
class VirtualMachineSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:virtualmachine-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='virtualization:virtualmachine')
status = ChoiceField(choices=VirtualMachineStatusChoices, required=False)
site = SiteSerializer(nested=True, required=False, allow_null=True, default=None)
cluster = ClusterSerializer(nested=True, required=False, allow_null=True, default=None)
@ -79,8 +77,6 @@ class VirtualMachineWithConfigContextSerializer(VirtualMachineSerializer):
#
class VMInterfaceSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:vminterface-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='virtualization:vminterface')
virtual_machine = VirtualMachineSerializer(nested=True)
parent = NestedVMInterfaceSerializer(required=False, allow_null=True)
bridge = NestedVMInterfaceSerializer(required=False, allow_null=True)
@ -131,8 +127,6 @@ class VMInterfaceSerializer(NetBoxModelSerializer):
#
class VirtualDiskSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:virtualdisk-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='virtualization:virtualdisk')
virtual_machine = VirtualMachineSerializer(nested=True)
class Meta:

View File

@ -23,8 +23,6 @@ __all__ = (
exclude_fields=('tunnel_count',),
)
class NestedTunnelGroupSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='vpn-api:tunnelgroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='vpn:tunnelgroup')
tunnel_count = RelatedObjectCountField('tunnels')
class Meta:
@ -33,12 +31,6 @@ class NestedTunnelGroupSerializer(WritableNestedSerializer):
class NestedTunnelSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:tunnel-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:tunnel'
)
class Meta:
model = models.Tunnel
@ -46,12 +38,6 @@ class NestedTunnelSerializer(WritableNestedSerializer):
class NestedTunnelTerminationSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:tunneltermination-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:tunneltermination'
)
class Meta:
model = models.TunnelTermination
@ -59,12 +45,6 @@ class NestedTunnelTerminationSerializer(WritableNestedSerializer):
class NestedIKEProposalSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:ikeproposal-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:ikeproposal'
)
class Meta:
model = models.IKEProposal
@ -72,12 +52,6 @@ class NestedIKEProposalSerializer(WritableNestedSerializer):
class NestedIKEPolicySerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:ikepolicy-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:ikepolicy'
)
class Meta:
model = models.IKEPolicy
@ -85,12 +59,6 @@ class NestedIKEPolicySerializer(WritableNestedSerializer):
class NestedIPSecProposalSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:ipsecproposal-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:ipsecproposal'
)
class Meta:
model = models.IPSecProposal
@ -98,12 +66,6 @@ class NestedIPSecProposalSerializer(WritableNestedSerializer):
class NestedIPSecPolicySerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:ipsecpolicy-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:ipsecpolicy'
)
class Meta:
model = models.IPSecPolicy
@ -111,12 +73,6 @@ class NestedIPSecPolicySerializer(WritableNestedSerializer):
class NestedIPSecProfileSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:ipsecprofile-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:ipsecprofile'
)
class Meta:
model = models.IPSecProfile
@ -128,8 +84,6 @@ class NestedIPSecProfileSerializer(WritableNestedSerializer):
#
class NestedL2VPNSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='vpn-api:l2vpn-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='vpn:l2vpn')
class Meta:
model = models.L2VPN
@ -139,8 +93,6 @@ class NestedL2VPNSerializer(WritableNestedSerializer):
class NestedL2VPNTerminationSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='vpn-api:l2vpntermination-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='vpn:l2vpntermination')
l2vpn = NestedL2VPNSerializer()
class Meta:

View File

@ -15,12 +15,6 @@ __all__ = (
class IKEProposalSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:ikeproposal-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:ikeproposal'
)
authentication_method = ChoiceField(
choices=AuthenticationMethodChoices
)
@ -45,12 +39,6 @@ class IKEProposalSerializer(NetBoxModelSerializer):
class IKEPolicySerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:ikepolicy-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:ikepolicy'
)
version = ChoiceField(
choices=IKEVersionChoices
)
@ -75,12 +63,6 @@ class IKEPolicySerializer(NetBoxModelSerializer):
class IPSecProposalSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:ipsecproposal-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:ipsecproposal'
)
encryption_algorithm = ChoiceField(
choices=EncryptionAlgorithmChoices
)
@ -98,12 +80,6 @@ class IPSecProposalSerializer(NetBoxModelSerializer):
class IPSecPolicySerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:ipsecpolicy-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:ipsecpolicy'
)
proposals = SerializedPKRelatedField(
queryset=IPSecProposal.objects.all(),
serializer=IPSecProposalSerializer,
@ -126,12 +102,6 @@ class IPSecPolicySerializer(NetBoxModelSerializer):
class IPSecProfileSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:ipsecprofile-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:ipsecprofile'
)
mode = ChoiceField(
choices=IPSecModeChoices
)

View File

@ -18,8 +18,6 @@ __all__ = (
class L2VPNSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='vpn-api:l2vpn-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='vpn:l2vpn')
type = ChoiceField(choices=L2VPNTypeChoices, required=False)
import_targets = SerializedPKRelatedField(
queryset=RouteTarget.objects.all(),
@ -47,8 +45,6 @@ class L2VPNSerializer(NetBoxModelSerializer):
class L2VPNTerminationSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='vpn-api:l2vpntermination-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='vpn:l2vpntermination')
l2vpn = L2VPNSerializer(
nested=True
)

View File

@ -23,8 +23,6 @@ __all__ = (
#
class TunnelGroupSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='vpn-api:tunnelgroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='vpn:tunnelgroup')
# Related object counts
tunnel_count = RelatedObjectCountField('tunnels')
@ -39,12 +37,6 @@ class TunnelGroupSerializer(NetBoxModelSerializer):
class TunnelSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:tunnel-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:tunnel'
)
status = ChoiceField(
choices=TunnelStatusChoices
)
@ -82,12 +74,6 @@ class TunnelSerializer(NetBoxModelSerializer):
class TunnelTerminationSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name='vpn-api:tunneltermination-detail'
)
display_url = serializers.HyperlinkedIdentityField(
view_name='vpn:tunneltermination'
)
tunnel = TunnelSerializer(
nested=True
)

View File

@ -15,8 +15,6 @@ __all__ = (
exclude_fields=('wirelesslan_count',),
)
class NestedWirelessLANGroupSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='wireless-api:wirelesslangroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='wireless:wirelesslangroup')
wirelesslan_count = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)
@ -26,8 +24,6 @@ class NestedWirelessLANGroupSerializer(WritableNestedSerializer):
class NestedWirelessLANSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='wireless-api:wirelesslan-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='wireless:wirelesslan')
class Meta:
model = WirelessLAN
@ -35,8 +31,6 @@ class NestedWirelessLANSerializer(WritableNestedSerializer):
class NestedWirelessLinkSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='wireless-api:wirelesslink-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='wireless:wirelesslink')
class Meta:
model = WirelessLink

View File

@ -15,8 +15,6 @@ __all__ = (
class WirelessLANGroupSerializer(NestedGroupModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='wireless-api:wirelesslangroup-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='wireless:wirelesslangroup')
parent = NestedWirelessLANGroupSerializer(required=False, allow_null=True, default=None)
wirelesslan_count = serializers.IntegerField(read_only=True, default=0)
@ -30,8 +28,6 @@ class WirelessLANGroupSerializer(NestedGroupModelSerializer):
class WirelessLANSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='wireless-api:wirelesslan-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='wireless:wirelesslan')
group = WirelessLANGroupSerializer(nested=True, required=False, allow_null=True)
status = ChoiceField(choices=WirelessLANStatusChoices, required=False, allow_blank=True)
vlan = VLANSerializer(nested=True, required=False, allow_null=True)

View File

@ -14,8 +14,6 @@ __all__ = (
class WirelessLinkSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='wireless-api:wirelesslink-detail')
display_url = serializers.HyperlinkedIdentityField(view_name='wireless:wirelesslink')
status = ChoiceField(choices=LinkStatusChoices, required=False)
interface_a = InterfaceSerializer(nested=True)
interface_b = InterfaceSerializer(nested=True)