Implement exclude_columns on embedded tables

This commit is contained in:
Jeremy Stretch 2026-04-01 10:54:34 -04:00
parent d4569df305
commit 364868a207
9 changed files with 48 additions and 3 deletions

View File

@ -53,6 +53,7 @@ class ProviderView(GetRelatedModelsMixin, generic.ObjectView):
ObjectsTablePanel(
model='circuits.ProviderAccount',
filters={'provider_id': lambda ctx: ctx['object'].pk},
exclude_columns=['provider'],
actions=[
actions.AddObject(
'circuits.ProviderAccount', url_params={'provider': lambda ctx: ctx['object'].pk}
@ -62,6 +63,7 @@ class ProviderView(GetRelatedModelsMixin, generic.ObjectView):
ObjectsTablePanel(
model='circuits.Circuit',
filters={'provider_id': lambda ctx: ctx['object'].pk},
exclude_columns=['provider'],
actions=[
actions.AddObject('circuits.Circuit', url_params={'provider': lambda ctx: ctx['object'].pk}),
],
@ -161,6 +163,7 @@ class ProviderAccountView(GetRelatedModelsMixin, generic.ObjectView):
ObjectsTablePanel(
model='circuits.Circuit',
filters={'provider_account_id': lambda ctx: ctx['object'].pk},
exclude_columns=['provider_account'],
actions=[
actions.AddObject(
'circuits.Circuit',
@ -257,6 +260,7 @@ class ProviderNetworkView(GetRelatedModelsMixin, generic.ObjectView):
ObjectsTablePanel(
model='circuits.VirtualCircuit',
filters={'provider_network_id': lambda ctx: ctx['object'].pk},
exclude_columns=['provider_network'],
actions=[
actions.AddObject(
'circuits.VirtualCircuit', url_params={'provider_network': lambda ctx: ctx['object'].pk}
@ -801,6 +805,7 @@ class VirtualCircuitView(generic.ObjectView):
model='circuits.VirtualCircuitTermination',
title=_('Terminations'),
filters={'virtual_circuit_id': lambda ctx: ctx['object'].pk},
exclude_columns=['virtual_circuit'],
actions=[
actions.AddObject(
'circuits.VirtualCircuitTermination',

View File

@ -94,6 +94,7 @@ class DataSourceView(GetRelatedModelsMixin, generic.ObjectView):
ObjectsTablePanel(
model='core.DataFile',
filters={'source_id': lambda ctx: ctx['object'].pk},
exclude_columns=['source'],
),
],
)

View File

@ -258,6 +258,7 @@ class RegionView(GetRelatedModelsMixin, generic.ObjectView):
model='dcim.Region',
title=_('Child Regions'),
filters={'parent_id': lambda ctx: ctx['object'].pk},
exclude_columns=['parent'],
actions=[
actions.AddObject('dcim.Region', url_params={'parent': lambda ctx: ctx['object'].pk}),
],
@ -390,6 +391,7 @@ class SiteGroupView(GetRelatedModelsMixin, generic.ObjectView):
model='dcim.SiteGroup',
title=_('Child Groups'),
filters={'parent_id': lambda ctx: ctx['object'].pk},
exclude_columns=['parent'],
actions=[
actions.AddObject('dcim.SiteGroup', url_params={'parent': lambda ctx: ctx['object'].pk}),
],
@ -540,6 +542,7 @@ class SiteView(GetRelatedModelsMixin, generic.ObjectView):
ObjectsTablePanel(
model='dcim.Location',
filters={'site_id': lambda ctx: ctx['object'].pk},
exclude_columns=['site'],
actions=[
actions.AddObject('dcim.Location', url_params={'site': lambda ctx: ctx['object'].pk}),
],
@ -552,6 +555,7 @@ class SiteView(GetRelatedModelsMixin, generic.ObjectView):
'rack_id': settings.FILTERS_NULL_CHOICE_VALUE,
'parent_bay_id': settings.FILTERS_NULL_CHOICE_VALUE,
},
exclude_columns=['site'],
actions=[
actions.AddObject('dcim.Device', url_params={'site': lambda ctx: ctx['object'].pk}),
],
@ -674,6 +678,7 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView):
model='dcim.Location',
title=_('Child Locations'),
filters={'parent_id': lambda ctx: ctx['object'].pk},
exclude_columns=['parent'],
actions=[
actions.AddObject(
'dcim.Location',
@ -692,6 +697,7 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView):
'rack_id': settings.FILTERS_NULL_CHOICE_VALUE,
'parent_bay_id': settings.FILTERS_NULL_CHOICE_VALUE,
},
exclude_columns=['location'],
actions=[
actions.AddObject(
'dcim.Device',
@ -1686,6 +1692,7 @@ class ModuleTypeProfileView(generic.ObjectView):
filters={
'profile_id': lambda ctx: ctx['object'].pk,
},
exclude_columns=['profile'],
actions=[
actions.AddObject(
'dcim.ModuleType',
@ -2427,6 +2434,7 @@ class DeviceRoleView(GetRelatedModelsMixin, generic.ObjectView):
model='dcim.DeviceRole',
title=_('Child Device Roles'),
filters={'parent_id': lambda ctx: ctx['object'].pk},
exclude_columns=['parent'],
actions=[
actions.AddObject('dcim.DeviceRole', url_params={'parent': lambda ctx: ctx['object'].pk}),
],
@ -2527,6 +2535,7 @@ class PlatformView(GetRelatedModelsMixin, generic.ObjectView):
model='dcim.Platform',
title=_('Child Platforms'),
filters={'parent_id': lambda ctx: ctx['object'].pk},
exclude_columns=['parent'],
actions=[
actions.AddObject('dcim.Platform', url_params={'parent': lambda ctx: ctx['object'].pk}),
],
@ -2605,6 +2614,7 @@ class DeviceView(generic.ObjectView):
ObjectsTablePanel(
model='dcim.VirtualDeviceContext',
filters={'device_id': lambda ctx: ctx['object'].pk},
exclude_columns=['device'],
actions=[
actions.AddObject('dcim.VirtualDeviceContext', url_params={'device': lambda ctx: ctx['object'].pk}),
],
@ -2617,6 +2627,7 @@ class DeviceView(generic.ObjectView):
model='ipam.Service',
title=_('Application Services'),
filters={'device_id': lambda ctx: ctx['object'].pk},
exclude_columns=['device'],
actions=[
actions.AddObject(
'ipam.Service',
@ -3376,11 +3387,13 @@ class InterfaceView(generic.ObjectView):
model='ipam.IPAddress',
filters={'interface_id': lambda ctx: ctx['object'].pk},
title=_('IP Addresses'),
exclude_columns=['assigned'],
),
ObjectsTablePanel(
model='dcim.MACAddress',
filters={'interface_id': lambda ctx: ctx['object'].pk},
title=_('MAC Addresses'),
exclude_columns=['assigned_object', 'assigned_object_parent'],
),
ObjectsTablePanel(
model='ipam.VLAN',

View File

@ -1331,6 +1331,7 @@ class VLANTranslationPolicyView(generic.ObjectView):
'ipam.vlantranslationrule',
filters={'policy_id': lambda ctx: ctx['object'].pk},
title=_('VLAN translation rules'),
exclude_columns=['policy'],
actions=[
actions.AddObject(
'ipam.vlantranslationrule',
@ -1628,6 +1629,7 @@ class VLANView(generic.ObjectView):
'ipam.prefix',
filters={'vlan_id': lambda ctx: ctx['object'].pk},
title=_('Prefixes'),
exclude_columns=['vlan'],
actions=[
actions.AddObject(
'ipam.prefix',

View File

@ -57,6 +57,7 @@ class TenantGroupView(GetRelatedModelsMixin, generic.ObjectView):
'tenancy.tenantgroup',
filters={'parent_id': lambda ctx: ctx['object'].pk},
title=_('Child Groups'),
exclude_columns=['parent'],
actions=[
actions.AddObject(
'tenancy.tenantgroup',
@ -235,6 +236,7 @@ class ContactGroupView(GetRelatedModelsMixin, generic.ObjectView):
'tenancy.contactgroup',
filters={'parent_id': lambda ctx: ctx['object'].pk},
title=_('Child Groups'),
exclude_columns=['parent'],
actions=[
actions.AddObject(
'tenancy.contactgroup',
@ -414,6 +416,7 @@ class ContactView(generic.ObjectView):
'tenancy.contactassignment',
filters={'contact_id': lambda ctx: ctx['object'].pk},
title=_('Assignments'),
exclude_columns=['contact'],
),
],
)

View File

@ -200,7 +200,11 @@ class GroupView(generic.ObjectView):
OrganizationalObjectPanel(),
],
right_panels=[
ObjectsTablePanel('users.User', filters={'group_id': lambda ctx: ctx['object'].pk}),
ObjectsTablePanel(
'users.User',
filters={'group_id': lambda ctx: ctx['object'].pk},
exclude_columns=['group'],
),
ObjectsTablePanel(
'users.ObjectPermission',
title=_('Assigned Permissions'),
@ -345,6 +349,7 @@ class OwnerGroupView(generic.ObjectView):
'users.Owner',
filters={'group_id': lambda ctx: ctx['object'].pk},
title=_('Members'),
exclude_columns=['group'],
actions=[
actions.AddObject(
'users.Owner',
@ -412,8 +417,16 @@ class OwnerView(GetRelatedModelsMixin, generic.ObjectView):
layout = layout.SimpleLayout(
left_panels=[
panels.OwnerPanel(),
ObjectsTablePanel('users.Group', filters={'owner_id': lambda ctx: ctx['object'].pk}),
ObjectsTablePanel('users.User', filters={'owner_id': lambda ctx: ctx['object'].pk}),
ObjectsTablePanel(
'users.Group',
filters={'owner_id': lambda ctx: ctx['object'].pk},
exclude_columns=['owner'],
),
ObjectsTablePanel(
'users.User',
filters={'owner_id': lambda ctx: ctx['object'].pk},
exclude_columns=['owner'],
),
],
right_panels=[
RelatedObjectsPanel(),

View File

@ -492,6 +492,7 @@ class VirtualMachineView(generic.ObjectView):
model='ipam.Service',
title=_('Application Services'),
filters={'virtual_machine_id': lambda ctx: ctx['object'].pk},
exclude_columns=['parent'],
actions=[
actions.AddObject(
'ipam.Service',
@ -508,6 +509,7 @@ class VirtualMachineView(generic.ObjectView):
ObjectsTablePanel(
model='virtualization.VirtualDisk',
filters={'virtual_machine_id': lambda ctx: ctx['object'].pk},
exclude_columns=['virtual_machine'],
actions=[
actions.AddObject(
'virtualization.VirtualDisk', url_params={'virtual_machine': lambda ctx: ctx['object'].pk}
@ -649,6 +651,7 @@ class VMInterfaceView(generic.ObjectView):
ObjectsTablePanel(
model='ipam.IPaddress',
filters={'vminterface_id': lambda ctx: ctx['object'].pk},
exclude_columns=['assigned'],
actions=[
actions.AddObject(
'ipam.IPaddress',
@ -662,6 +665,7 @@ class VMInterfaceView(generic.ObjectView):
ObjectsTablePanel(
model='dcim.MACAddress',
filters={'vminterface_id': lambda ctx: ctx['object'].pk},
exclude_columns=['assigned_object', 'assigned_object_parent'],
actions=[
actions.AddObject(
'dcim.MACAddress', url_params={'vminterface': lambda ctx: ctx['object'].pk}

View File

@ -129,6 +129,7 @@ class TunnelView(generic.ObjectView):
ObjectsTablePanel(
'vpn.tunneltermination',
filters={'tunnel_id': lambda ctx: ctx['object'].pk},
exclude_columns=['tunnel'],
actions=[
actions.AddObject(
'vpn.tunneltermination',
@ -223,6 +224,7 @@ class TunnelTerminationView(generic.ObjectView):
'tunnel_id': lambda ctx: ctx['object'].tunnel.pk,
'id__n': lambda ctx: ctx['object'].pk,
},
exclude_columns=['tunnel'],
title=_('Peer Terminations'),
),
],
@ -675,6 +677,7 @@ class L2VPNView(generic.ObjectView):
ObjectsTablePanel(
'vpn.l2vpntermination',
filters={'l2vpn_id': lambda ctx: ctx['object'].pk},
exclude_columns=['l2vpn'],
actions=[
actions.AddObject(
'vpn.l2vpntermination',

View File

@ -53,6 +53,7 @@ class WirelessLANGroupView(GetRelatedModelsMixin, generic.ObjectView):
model='wireless.WirelessLANGroup',
title=_('Child Groups'),
filters={'parent_id': lambda ctx: ctx['object'].pk},
exclude_columns=['parent'],
actions=[
actions.AddObject(
'wireless.WirelessLANGroup',