diff --git a/netbox/circuits/models/circuits.py b/netbox/circuits/models/circuits.py index 68c938aa9..f34df0d6a 100644 --- a/netbox/circuits/models/circuits.py +++ b/netbox/circuits/models/circuits.py @@ -28,9 +28,6 @@ class CircuitType(OrganizationalModel): blank=True ) - def get_absolute_url(self): - return reverse('circuits:circuittype', args=[self.pk]) - class Meta: ordering = ('name',) verbose_name = _('circuit type') @@ -140,9 +137,6 @@ class Circuit(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): def __str__(self): return self.cid - def get_absolute_url(self): - return reverse('circuits:circuit', args=[self.pk]) - def get_status_color(self): return CircuitStatusChoices.colors.get(self.status) @@ -173,9 +167,6 @@ class CircuitGroup(OrganizationalModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('circuits:circuitgroup', args=[self.pk]) - class CircuitGroupAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLoggedModel): """ diff --git a/netbox/circuits/models/providers.py b/netbox/circuits/models/providers.py index 31c8bccb2..593997527 100644 --- a/netbox/circuits/models/providers.py +++ b/netbox/circuits/models/providers.py @@ -45,9 +45,6 @@ class Provider(ContactsMixin, PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('circuits:provider', args=[self.pk]) - class ProviderAccount(ContactsMixin, PrimaryModel): """ @@ -91,9 +88,6 @@ class ProviderAccount(ContactsMixin, PrimaryModel): return f'{self.account} ({self.name})' return f'{self.account}' - def get_absolute_url(self): - return reverse('circuits:provideraccount', args=[self.pk]) - class ProviderNetwork(PrimaryModel): """ @@ -128,6 +122,3 @@ class ProviderNetwork(PrimaryModel): def __str__(self): return self.name - - def get_absolute_url(self): - return reverse('circuits:providernetwork', args=[self.pk]) diff --git a/netbox/core/models/data.py b/netbox/core/models/data.py index 97f9fdac7..a40b58bc7 100644 --- a/netbox/core/models/data.py +++ b/netbox/core/models/data.py @@ -84,9 +84,6 @@ class DataSource(JobsMixin, PrimaryModel): def __str__(self): return f'{self.name}' - def get_absolute_url(self): - return reverse('core:datasource', args=[self.pk]) - @property def docs_url(self): return f'{settings.STATIC_URL}docs/models/{self._meta.app_label}/{self._meta.model_name}/' diff --git a/netbox/dcim/models/cables.py b/netbox/dcim/models/cables.py index f996fe67d..f89d57627 100644 --- a/netbox/dcim/models/cables.py +++ b/netbox/dcim/models/cables.py @@ -116,9 +116,6 @@ class Cable(PrimaryModel): pk = self.pk or self._pk return self.label or f'#{pk}' - def get_absolute_url(self): - return reverse('dcim:cable', args=[self.pk]) - @property def a_terminations(self): if hasattr(self, '_a_terminations'): diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index 54628aa73..d25ed261c 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -301,9 +301,6 @@ class ConsolePort(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracki verbose_name = _('console port') verbose_name_plural = _('console ports') - def get_absolute_url(self): - return reverse('dcim:consoleport', kwargs={'pk': self.pk}) - class ConsoleServerPort(ModularComponentModel, CabledObjectModel, PathEndpoint, TrackingModelMixin): """ @@ -330,9 +327,6 @@ class ConsoleServerPort(ModularComponentModel, CabledObjectModel, PathEndpoint, verbose_name = _('console server port') verbose_name_plural = _('console server ports') - def get_absolute_url(self): - return reverse('dcim:consoleserverport', kwargs={'pk': self.pk}) - # # Power components @@ -370,9 +364,6 @@ class PowerPort(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracking verbose_name = _('power port') verbose_name_plural = _('power ports') - def get_absolute_url(self): - return reverse('dcim:powerport', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -492,9 +483,6 @@ class PowerOutlet(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracki verbose_name = _('power outlet') verbose_name_plural = _('power outlets') - def get_absolute_url(self): - return reverse('dcim:poweroutlet', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -750,9 +738,6 @@ class Interface(ModularComponentModel, BaseInterface, CabledObjectModel, PathEnd verbose_name = _('interface') verbose_name_plural = _('interfaces') - def get_absolute_url(self): - return reverse('dcim:interface', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1011,9 +996,6 @@ class FrontPort(ModularComponentModel, CabledObjectModel, TrackingModelMixin): verbose_name = _('front port') verbose_name_plural = _('front ports') - def get_absolute_url(self): - return reverse('dcim:frontport', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1069,9 +1051,6 @@ class RearPort(ModularComponentModel, CabledObjectModel, TrackingModelMixin): verbose_name = _('rear port') verbose_name_plural = _('rear ports') - def get_absolute_url(self): - return reverse('dcim:rearport', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1128,9 +1107,6 @@ class ModuleBay(ModularComponentModel, TrackingModelMixin, MPTTModel): class MPTTMeta: order_insertion_by = ('module',) - def get_absolute_url(self): - return reverse('dcim:modulebay', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1169,9 +1145,6 @@ class DeviceBay(ComponentModel, TrackingModelMixin): verbose_name = _('device bay') verbose_name_plural = _('device bays') - def get_absolute_url(self): - return reverse('dcim:devicebay', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1215,9 +1188,6 @@ class InventoryItemRole(OrganizationalModel): verbose_name = _('inventory item role') verbose_name_plural = _('inventory item roles') - def get_absolute_url(self): - return reverse('dcim:inventoryitemrole', args=[self.pk]) - class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): """ @@ -1311,9 +1281,6 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): verbose_name = _('inventory item') verbose_name_plural = _('inventory items') - def get_absolute_url(self): - return reverse('dcim:inventoryitem', kwargs={'pk': self.pk}) - def clean(self): super().clean() diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index a2b78957e..3031673b0 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -54,9 +54,6 @@ class Manufacturer(ContactsMixin, OrganizationalModel): verbose_name = _('manufacturer') verbose_name_plural = _('manufacturers') - def get_absolute_url(self): - return reverse('dcim:manufacturer', args=[self.pk]) - class DeviceType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): """ @@ -217,9 +214,6 @@ class DeviceType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): self._original_front_image = self.__dict__.get('front_image') self._original_rear_image = self.__dict__.get('rear_image') - def get_absolute_url(self): - return reverse('dcim:devicetype', args=[self.pk]) - @property def full_name(self): return f"{self.manufacturer} {self.model}" @@ -414,9 +408,6 @@ class ModuleType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): def __str__(self): return self.model - def get_absolute_url(self): - return reverse('dcim:moduletype', args=[self.pk]) - @property def full_name(self): return f"{self.manufacturer} {self.model}" @@ -497,9 +488,6 @@ class DeviceRole(OrganizationalModel): verbose_name = _('device role') verbose_name_plural = _('device roles') - def get_absolute_url(self): - return reverse('dcim:devicerole', args=[self.pk]) - class Platform(OrganizationalModel): """ @@ -527,9 +515,6 @@ class Platform(OrganizationalModel): verbose_name = _('platform') verbose_name_plural = _('platforms') - def get_absolute_url(self): - return reverse('dcim:platform', args=[self.pk]) - def update_interface_bridges(device, interface_templates, module=None): """ @@ -823,9 +808,6 @@ class Device( return f'{self.device_type.manufacturer} {self.device_type.model} ({self.pk})' return super().__str__() - def get_absolute_url(self): - return reverse('dcim:device', args=[self.pk]) - def clean(self): super().clean() @@ -1192,9 +1174,6 @@ class Module(PrimaryModel, ConfigContextModel): def __str__(self): return f'{self.module_bay.name}: {self.module_type} ({self.pk})' - def get_absolute_url(self): - return reverse('dcim:module', args=[self.pk]) - def get_status_color(self): return ModuleStatusChoices.colors.get(self.status) @@ -1343,9 +1322,6 @@ class VirtualChassis(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:virtualchassis', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1445,9 +1421,6 @@ class VirtualDeviceContext(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:virtualdevicecontext', kwargs={'pk': self.pk}) - def get_status_color(self): return VirtualDeviceContextStatusChoices.colors.get(self.status) diff --git a/netbox/dcim/models/power.py b/netbox/dcim/models/power.py index 826eaae9c..168428c44 100644 --- a/netbox/dcim/models/power.py +++ b/netbox/dcim/models/power.py @@ -58,9 +58,6 @@ class PowerPanel(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:powerpanel', args=[self.pk]) - def clean(self): super().clean() @@ -167,9 +164,6 @@ class PowerFeed(PrimaryModel, PathEndpoint, CabledObjectModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:powerfeed', args=[self.pk]) - def clean(self): super().clean() diff --git a/netbox/dcim/models/racks.py b/netbox/dcim/models/racks.py index 3aead09ca..226074444 100644 --- a/netbox/dcim/models/racks.py +++ b/netbox/dcim/models/racks.py @@ -165,9 +165,6 @@ class RackType(RackBase): def __str__(self): return self.model - def get_absolute_url(self): - return reverse('dcim:racktype', args=[self.pk]) - @property def full_name(self): return f"{self.manufacturer} {self.model}" @@ -230,9 +227,6 @@ class RackRole(OrganizationalModel): verbose_name = _('rack role') verbose_name_plural = _('rack roles') - def get_absolute_url(self): - return reverse('dcim:rackrole', args=[self.pk]) - class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): """ @@ -364,9 +358,6 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): return f'{self.name} ({self.facility_id})' return self.name - def get_absolute_url(self): - return reverse('dcim:rack', args=[self.pk]) - def clean(self): super().clean() @@ -699,9 +690,6 @@ class RackReservation(PrimaryModel): def __str__(self): return "Reservation for rack {}".format(self.rack) - def get_absolute_url(self): - return reverse('dcim:rackreservation', args=[self.pk]) - def clean(self): super().clean() diff --git a/netbox/dcim/models/sites.py b/netbox/dcim/models/sites.py index c1da807ad..7884afa54 100644 --- a/netbox/dcim/models/sites.py +++ b/netbox/dcim/models/sites.py @@ -62,9 +62,6 @@ class Region(ContactsMixin, NestedGroupModel): verbose_name = _('region') verbose_name_plural = _('regions') - def get_absolute_url(self): - return reverse('dcim:region', args=[self.pk]) - def get_site_count(self): return Site.objects.filter( Q(region=self) | @@ -115,9 +112,6 @@ class SiteGroup(ContactsMixin, NestedGroupModel): verbose_name = _('site group') verbose_name_plural = _('site groups') - def get_absolute_url(self): - return reverse('dcim:sitegroup', args=[self.pk]) - def get_site_count(self): return Site.objects.filter( Q(group=self) | @@ -241,9 +235,6 @@ class Site(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:site', args=[self.pk]) - def get_status_color(self): return SiteStatusChoices.colors.get(self.status) @@ -322,9 +313,6 @@ class Location(ContactsMixin, ImageAttachmentsMixin, NestedGroupModel): verbose_name = _('location') verbose_name_plural = _('locations') - def get_absolute_url(self): - return reverse('dcim:location', args=[self.pk]) - def get_status_color(self): return LocationStatusChoices.colors.get(self.status) diff --git a/netbox/ipam/models/asns.py b/netbox/ipam/models/asns.py index d02efd91c..4b51eedbb 100644 --- a/netbox/ipam/models/asns.py +++ b/netbox/ipam/models/asns.py @@ -54,9 +54,6 @@ class ASNRange(OrganizationalModel): def __str__(self): return f'{self.name} ({self.range_as_string()})' - def get_absolute_url(self): - return reverse('ipam:asnrange', args=[self.pk]) - @property def range(self): return range(self.start, self.end + 1) @@ -128,9 +125,6 @@ class ASN(PrimaryModel): def __str__(self): return f'AS{self.asn_with_asdot}' - def get_absolute_url(self): - return reverse('ipam:asn', args=[self.pk]) - @property def asn_asdot(self): """ diff --git a/netbox/ipam/models/fhrp.py b/netbox/ipam/models/fhrp.py index c3a7084b6..bf60f188a 100644 --- a/netbox/ipam/models/fhrp.py +++ b/netbox/ipam/models/fhrp.py @@ -71,9 +71,6 @@ class FHRPGroup(PrimaryModel): return name - def get_absolute_url(self): - return reverse('ipam:fhrpgroup', args=[self.pk]) - class FHRPGroupAssignment(ChangeLoggedModel): interface_type = models.ForeignKey( diff --git a/netbox/ipam/models/ip.py b/netbox/ipam/models/ip.py index 0b8e3a8df..7bf97897b 100644 --- a/netbox/ipam/models/ip.py +++ b/netbox/ipam/models/ip.py @@ -71,9 +71,6 @@ class RIR(OrganizationalModel): verbose_name = _('RIR') verbose_name_plural = _('RIRs') - def get_absolute_url(self): - return reverse('ipam:rir', args=[self.pk]) - class Aggregate(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): """ @@ -118,9 +115,6 @@ class Aggregate(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): def __str__(self): return str(self.prefix) - def get_absolute_url(self): - return reverse('ipam:aggregate', args=[self.pk]) - def clean(self): super().clean() @@ -203,9 +197,6 @@ class Role(OrganizationalModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('ipam:role', args=[self.pk]) - class Prefix(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): """ @@ -303,9 +294,6 @@ class Prefix(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): def __str__(self): return str(self.prefix) - def get_absolute_url(self): - return reverse('ipam:prefix', args=[self.pk]) - def clean(self): super().clean() @@ -551,9 +539,6 @@ class IPRange(ContactsMixin, PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('ipam:iprange', args=[self.pk]) - def clean(self): super().clean() @@ -798,9 +783,6 @@ class IPAddress(ContactsMixin, PrimaryModel): self._original_assigned_object_id = self.__dict__.get('assigned_object_id') self._original_assigned_object_type_id = self.__dict__.get('assigned_object_type_id') - def get_absolute_url(self): - return reverse('ipam:ipaddress', args=[self.pk]) - def get_duplicates(self): return IPAddress.objects.filter( vrf=self.vrf, diff --git a/netbox/ipam/models/services.py b/netbox/ipam/models/services.py index 71f34c66c..e878870cb 100644 --- a/netbox/ipam/models/services.py +++ b/netbox/ipam/models/services.py @@ -59,9 +59,6 @@ class ServiceTemplate(ServiceBase, PrimaryModel): verbose_name = _('service template') verbose_name_plural = _('service templates') - def get_absolute_url(self): - return reverse('ipam:servicetemplate', args=[self.pk]) - class Service(ContactsMixin, ServiceBase, PrimaryModel): """ @@ -102,9 +99,6 @@ class Service(ContactsMixin, ServiceBase, PrimaryModel): verbose_name = _('service') verbose_name_plural = _('services') - def get_absolute_url(self): - return reverse('ipam:service', args=[self.pk]) - @property def parent(self): return self.device or self.virtual_machine diff --git a/netbox/ipam/models/vlans.py b/netbox/ipam/models/vlans.py index 998bc9e2c..852dfe148 100644 --- a/netbox/ipam/models/vlans.py +++ b/netbox/ipam/models/vlans.py @@ -84,9 +84,6 @@ class VLANGroup(OrganizationalModel): verbose_name = _('VLAN group') verbose_name_plural = _('VLAN groups') - def get_absolute_url(self): - return reverse('ipam:vlangroup', args=[self.pk]) - def clean(self): super().clean() @@ -237,9 +234,6 @@ class VLAN(PrimaryModel): def __str__(self): return f'{self.name} ({self.vid})' - def get_absolute_url(self): - return reverse('ipam:vlan', args=[self.pk]) - def clean(self): super().clean() diff --git a/netbox/ipam/models/vrfs.py b/netbox/ipam/models/vrfs.py index 1f9b928f5..f0a6d815e 100644 --- a/netbox/ipam/models/vrfs.py +++ b/netbox/ipam/models/vrfs.py @@ -67,9 +67,6 @@ class VRF(PrimaryModel): return f'{self.name} ({self.rd})' return self.name - def get_absolute_url(self): - return reverse('ipam:vrf', args=[self.pk]) - class RouteTarget(PrimaryModel): """ @@ -96,6 +93,3 @@ class RouteTarget(PrimaryModel): def __str__(self): return self.name - - def get_absolute_url(self): - return reverse('ipam:routetarget', args=[self.pk]) diff --git a/netbox/netbox/models/__init__.py b/netbox/netbox/models/__init__.py index aea5f00cc..b1f7cfd48 100644 --- a/netbox/netbox/models/__init__.py +++ b/netbox/netbox/models/__init__.py @@ -3,6 +3,7 @@ from django.contrib.contenttypes.fields import GenericForeignKey from django.core.exceptions import ObjectDoesNotExist from django.core.validators import ValidationError from django.db import models +from django.urls import reverse from django.utils.translation import gettext_lazy as _ from mptt.models import MPTTModel, TreeForeignKey @@ -40,6 +41,9 @@ class NetBoxFeatureSet( def docs_url(self): return f'{settings.STATIC_URL}docs/models/{self._meta.app_label}/{self._meta.model_name}/' + def get_absolute_url(self): + return reverse(f'{self._meta.app_label}:{self._meta.model_name}', args=[self.pk]) + # # Base model classes diff --git a/netbox/tenancy/models/contacts.py b/netbox/tenancy/models/contacts.py index e31330657..46ca97261 100644 --- a/netbox/tenancy/models/contacts.py +++ b/netbox/tenancy/models/contacts.py @@ -32,17 +32,11 @@ class ContactGroup(NestedGroupModel): verbose_name = _('contact group') verbose_name_plural = _('contact groups') - def get_absolute_url(self): - return reverse('tenancy:contactgroup', args=[self.pk]) - class ContactRole(OrganizationalModel): """ Functional role for a Contact assigned to an object. """ - def get_absolute_url(self): - return reverse('tenancy:contactrole', args=[self.pk]) - class Meta: ordering = ('name',) verbose_name = _('contact role') @@ -106,9 +100,6 @@ class Contact(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('tenancy:contact', args=[self.pk]) - class ContactAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLoggedModel): object_type = models.ForeignKey( diff --git a/netbox/tenancy/models/tenants.py b/netbox/tenancy/models/tenants.py index dfc144dd2..118a63d31 100644 --- a/netbox/tenancy/models/tenants.py +++ b/netbox/tenancy/models/tenants.py @@ -32,9 +32,6 @@ class TenantGroup(NestedGroupModel): verbose_name = _('tenant group') verbose_name_plural = _('tenant groups') - def get_absolute_url(self): - return reverse('tenancy:tenantgroup', args=[self.pk]) - class Tenant(ContactsMixin, PrimaryModel): """ @@ -90,6 +87,3 @@ class Tenant(ContactsMixin, PrimaryModel): def __str__(self): return self.name - - def get_absolute_url(self): - return reverse('tenancy:tenant', args=[self.pk]) diff --git a/netbox/virtualization/models/clusters.py b/netbox/virtualization/models/clusters.py index 7f00d72a7..ed1756ee8 100644 --- a/netbox/virtualization/models/clusters.py +++ b/netbox/virtualization/models/clusters.py @@ -25,9 +25,6 @@ class ClusterType(OrganizationalModel): verbose_name = _('cluster type') verbose_name_plural = _('cluster types') - def get_absolute_url(self): - return reverse('virtualization:clustertype', args=[self.pk]) - class ClusterGroup(ContactsMixin, OrganizationalModel): """ @@ -45,9 +42,6 @@ class ClusterGroup(ContactsMixin, OrganizationalModel): verbose_name = _('cluster group') verbose_name_plural = _('cluster groups') - def get_absolute_url(self): - return reverse('virtualization:clustergroup', args=[self.pk]) - class Cluster(ContactsMixin, PrimaryModel): """ @@ -124,9 +118,6 @@ class Cluster(ContactsMixin, PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('virtualization:cluster', args=[self.pk]) - def get_status_color(self): return ClusterStatusChoices.colors.get(self.status) diff --git a/netbox/virtualization/models/virtualmachines.py b/netbox/virtualization/models/virtualmachines.py index 17929f476..d2ea34bef 100644 --- a/netbox/virtualization/models/virtualmachines.py +++ b/netbox/virtualization/models/virtualmachines.py @@ -172,9 +172,6 @@ class VirtualMachine(ContactsMixin, ImageAttachmentsMixin, RenderConfigMixin, Co def __str__(self): return self.name - def get_absolute_url(self): - return reverse('virtualization:virtualmachine', args=[self.pk]) - def clean(self): super().clean() @@ -377,9 +374,6 @@ class VMInterface(ComponentModel, BaseInterface, TrackingModelMixin): verbose_name = _('interface') verbose_name_plural = _('interfaces') - def get_absolute_url(self): - return reverse('virtualization:vminterface', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -437,6 +431,3 @@ class VirtualDisk(ComponentModel, TrackingModelMixin): class Meta(ComponentModel.Meta): verbose_name = _('virtual disk') verbose_name_plural = _('virtual disks') - - def get_absolute_url(self): - return reverse('virtualization:virtualdisk', args=[self.pk]) diff --git a/netbox/vpn/models/crypto.py b/netbox/vpn/models/crypto.py index 2769430fd..1d84fa814 100644 --- a/netbox/vpn/models/crypto.py +++ b/netbox/vpn/models/crypto.py @@ -62,9 +62,6 @@ class IKEProposal(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('vpn:ikeproposal', args=[self.pk]) - class IKEPolicy(PrimaryModel): name = models.CharField( @@ -107,9 +104,6 @@ class IKEPolicy(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('vpn:ikepolicy', args=[self.pk]) - def clean(self): super().clean() @@ -167,9 +161,6 @@ class IPSecProposal(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('vpn:ipsecproposal', args=[self.pk]) - def clean(self): super().clean() @@ -212,9 +203,6 @@ class IPSecPolicy(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('vpn:ipsecpolicy', args=[self.pk]) - class IPSecProfile(PrimaryModel): name = models.CharField( @@ -252,6 +240,3 @@ class IPSecProfile(PrimaryModel): def __str__(self): return self.name - - def get_absolute_url(self): - return reverse('vpn:ipsecprofile', args=[self.pk]) diff --git a/netbox/vpn/models/l2vpn.py b/netbox/vpn/models/l2vpn.py index 39956edc8..1a366206a 100644 --- a/netbox/vpn/models/l2vpn.py +++ b/netbox/vpn/models/l2vpn.py @@ -68,9 +68,6 @@ class L2VPN(ContactsMixin, PrimaryModel): return f'{self.name} ({self.identifier})' return f'{self.name}' - def get_absolute_url(self): - return reverse('vpn:l2vpn', args=[self.pk]) - @cached_property def can_add_termination(self): if self.type in L2VPNTypeChoices.P2P and self.terminations.count() >= 2: @@ -121,9 +118,6 @@ class L2VPNTermination(NetBoxModel): return f'{self.assigned_object} <> {self.l2vpn}' return super().__str__() - def get_absolute_url(self): - return reverse('vpn:l2vpntermination', args=[self.pk]) - def clean(self): # Only check is assigned_object is set. Required otherwise we have an Integrity Error thrown. if self.assigned_object: diff --git a/netbox/vpn/models/tunnels.py b/netbox/vpn/models/tunnels.py index 6f4fa4182..3a0f1dc14 100644 --- a/netbox/vpn/models/tunnels.py +++ b/netbox/vpn/models/tunnels.py @@ -26,9 +26,6 @@ class TunnelGroup(OrganizationalModel): verbose_name = _('tunnel group') verbose_name_plural = _('tunnel groups') - def get_absolute_url(self): - return reverse('vpn:tunnelgroup', args=[self.pk]) - class Tunnel(PrimaryModel): name = models.CharField( @@ -97,9 +94,6 @@ class Tunnel(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('vpn:tunnel', args=[self.pk]) - def get_status_color(self): return TunnelStatusChoices.colors.get(self.status) diff --git a/netbox/wireless/models.py b/netbox/wireless/models.py index 4214ac29d..e48c87167 100644 --- a/netbox/wireless/models.py +++ b/netbox/wireless/models.py @@ -69,9 +69,6 @@ class WirelessLANGroup(NestedGroupModel): verbose_name = _('wireless LAN group') verbose_name_plural = _('wireless LAN groups') - def get_absolute_url(self): - return reverse('wireless:wirelesslangroup', args=[self.pk]) - class WirelessLAN(WirelessAuthenticationBase, PrimaryModel): """ @@ -119,9 +116,6 @@ class WirelessLAN(WirelessAuthenticationBase, PrimaryModel): def __str__(self): return self.ssid - def get_absolute_url(self): - return reverse('wireless:wirelesslan', args=[self.pk]) - def get_status_color(self): return WirelessLANStatusChoices.colors.get(self.status) @@ -222,9 +216,6 @@ class WirelessLink(WirelessAuthenticationBase, PrimaryModel): def __str__(self): return self.ssid or f'#{self.pk}' - def get_absolute_url(self): - return reverse('wireless:wirelesslink', args=[self.pk]) - def get_status_color(self): return LinkStatusChoices.colors.get(self.status)