diff --git a/docs/release-notes/version-2.11.md b/docs/release-notes/version-2.11.md index be0947aaf..0dd01f656 100644 --- a/docs/release-notes/version-2.11.md +++ b/docs/release-notes/version-2.11.md @@ -7,6 +7,7 @@ * [#6197](https://github.com/netbox-community/netbox/issues/6197) - Introduced `SESSION_COOKIE_NAME` config parameter * [#6318](https://github.com/netbox-community/netbox/issues/6318) - Add OM5 MMF cable type * [#6351](https://github.com/netbox-community/netbox/issues/6351) - Add aggregates count to tenant view +* [#6359](https://github.com/netbox-community/netbox/issues/6359) - Enable custom links for organizational and nested group models ### Bug Fixes diff --git a/netbox/circuits/models.py b/netbox/circuits/models.py index b2ffb3c09..31d08537e 100644 --- a/netbox/circuits/models.py +++ b/netbox/circuits/models.py @@ -149,7 +149,7 @@ class ProviderNetwork(PrimaryModel): ) -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class CircuitType(OrganizationalModel): """ Circuits can be organized by their functional role. For example, a user might wish to define CircuitTypes named diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index 2fe7c28e5..f2a7ad294 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -36,7 +36,7 @@ __all__ = ( # Device Types # -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class Manufacturer(OrganizationalModel): """ A Manufacturer represents a company which produces hardware devices; for example, Juniper or Dell. @@ -337,7 +337,7 @@ class DeviceType(PrimaryModel): # Devices # -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class DeviceRole(OrganizationalModel): """ Devices are organized by functional role; for example, "Core Switch" or "File Server". Each DeviceRole is assigned a @@ -388,7 +388,7 @@ class DeviceRole(OrganizationalModel): ) -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class Platform(OrganizationalModel): """ Platform refers to the software or firmware running on a Device. For example, "Cisco IOS-XR" or "Juniper Junos". diff --git a/netbox/dcim/models/racks.py b/netbox/dcim/models/racks.py index 2869c4265..0eb799dd4 100644 --- a/netbox/dcim/models/racks.py +++ b/netbox/dcim/models/racks.py @@ -35,7 +35,7 @@ __all__ = ( # Racks # -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class RackRole(OrganizationalModel): """ Racks can be organized by functional role, similar to Devices. diff --git a/netbox/dcim/models/sites.py b/netbox/dcim/models/sites.py index 225a8e749..1e5165088 100644 --- a/netbox/dcim/models/sites.py +++ b/netbox/dcim/models/sites.py @@ -26,7 +26,7 @@ __all__ = ( # Regions # -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class Region(NestedGroupModel): """ A region represents a geographic collection of sites. For example, you might create regions representing countries, @@ -78,7 +78,7 @@ class Region(NestedGroupModel): # Site groups # -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class SiteGroup(NestedGroupModel): """ A site group is an arbitrary grouping of sites. For example, you might have corporate sites and customer sites; and @@ -285,7 +285,7 @@ class Site(PrimaryModel): # Locations # -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class Location(NestedGroupModel): """ A Location represents a subgroup of Racks and/or Devices within a Site. A Location may represent a building within a diff --git a/netbox/ipam/models/ip.py b/netbox/ipam/models/ip.py index b11a88d54..e521dc5c9 100644 --- a/netbox/ipam/models/ip.py +++ b/netbox/ipam/models/ip.py @@ -29,7 +29,7 @@ __all__ = ( ) -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class RIR(OrganizationalModel): """ A Regional Internet Registry (RIR) is responsible for the allocation of a large portion of the global IP address @@ -184,7 +184,7 @@ class Aggregate(PrimaryModel): return int(float(child_prefixes.size) / self.prefix.size * 100) -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class Role(OrganizationalModel): """ A Role represents the functional role of a Prefix or VLAN; for example, "Customer," "Infrastructure," or diff --git a/netbox/ipam/models/vlans.py b/netbox/ipam/models/vlans.py index d0f5375e2..0801504fe 100644 --- a/netbox/ipam/models/vlans.py +++ b/netbox/ipam/models/vlans.py @@ -21,7 +21,7 @@ __all__ = ( ) -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class VLANGroup(OrganizationalModel): """ A VLAN group is an arbitrary collection of VLANs within which VLAN IDs and names must be unique. diff --git a/netbox/secrets/models.py b/netbox/secrets/models.py index dc3a65747..04a7ed58c 100644 --- a/netbox/secrets/models.py +++ b/netbox/secrets/models.py @@ -233,7 +233,7 @@ class SessionKey(BigIDModel): return session_key -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class SecretRole(OrganizationalModel): """ A SecretRole represents an arbitrary functional classification of Secrets. For example, a user might define roles diff --git a/netbox/tenancy/models.py b/netbox/tenancy/models.py index cad1b3c20..c9f55ec84 100644 --- a/netbox/tenancy/models.py +++ b/netbox/tenancy/models.py @@ -14,7 +14,7 @@ __all__ = ( ) -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class TenantGroup(NestedGroupModel): """ An arbitrary collection of Tenants. diff --git a/netbox/virtualization/models.py b/netbox/virtualization/models.py index 76f7fe845..5aa43a869 100644 --- a/netbox/virtualization/models.py +++ b/netbox/virtualization/models.py @@ -30,7 +30,7 @@ __all__ = ( # Cluster types # -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class ClusterType(OrganizationalModel): """ A type of Cluster. @@ -73,7 +73,7 @@ class ClusterType(OrganizationalModel): # Cluster groups # -@extras_features('custom_fields', 'export_templates', 'webhooks') +@extras_features('custom_fields', 'custom_links', 'export_templates', 'webhooks') class ClusterGroup(OrganizationalModel): """ An organizational group of Clusters.