mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-24 08:25:17 -06:00
Add new filters instead of using undocumented query params
This commit is contained in:
parent
e35d658d74
commit
a91c096101
@ -1462,16 +1462,37 @@ class InterfaceFilterSet(
|
|||||||
PathEndpointFilterSet,
|
PathEndpointFilterSet,
|
||||||
CommonInterfaceFilterSet
|
CommonInterfaceFilterSet
|
||||||
):
|
):
|
||||||
# Override device and device_id filters from DeviceComponentFilterSet to match against any peer virtual chassis
|
virtual_chassis_for_device = django_filters.ModelMultipleChoiceFilter(
|
||||||
# members
|
field_name='device__virtual_chassis__members',
|
||||||
device = MultiValueCharFilter(
|
queryset=Device.objects.all(),
|
||||||
method='filter_device',
|
to_field_name='name',
|
||||||
field_name='name',
|
label=_('Virtual Chassis Interfaces for Device (ID)')
|
||||||
|
)
|
||||||
|
virtual_chassis_for_device_id = django_filters.ModelMultipleChoiceFilter(
|
||||||
|
field_name='device__virtual_chassis__members',
|
||||||
|
queryset=Device.objects.all(),
|
||||||
|
label=_('Virtual Chassis Interfaces for Device (ID)')
|
||||||
|
)
|
||||||
|
virtual_chassis = django_filters.ModelMultipleChoiceFilter(
|
||||||
|
field_name='device__virtual_chassis',
|
||||||
|
queryset=VirtualChassis.objects.all(),
|
||||||
|
to_field_name='name',
|
||||||
|
label=_('Virtual Chassis Interfaces')
|
||||||
|
)
|
||||||
|
virtual_chassis_id = django_filters.ModelMultipleChoiceFilter(
|
||||||
|
field_name='device__virtual_chassis',
|
||||||
|
queryset=VirtualChassis.objects.all(),
|
||||||
|
label=_('Virtual Chassis Interfaces (ID)')
|
||||||
|
)
|
||||||
|
device = django_filters.ModelMultipleChoiceFilter(
|
||||||
|
field_name='device',
|
||||||
|
queryset=Device.objects.all(),
|
||||||
|
to_field_name='name',
|
||||||
label=_('Device'),
|
label=_('Device'),
|
||||||
)
|
)
|
||||||
device_id = MultiValueNumberFilter(
|
device_id = django_filters.ModelMultipleChoiceFilter(
|
||||||
method='filter_device',
|
field_name='device',
|
||||||
field_name='pk',
|
queryset=Device.objects.all(),
|
||||||
label=_('Device (ID)'),
|
label=_('Device (ID)'),
|
||||||
)
|
)
|
||||||
kind = django_filters.CharFilter(
|
kind = django_filters.CharFilter(
|
||||||
@ -1540,21 +1561,6 @@ class InterfaceFilterSet(
|
|||||||
'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'description', 'cable_end',
|
'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'description', 'cable_end',
|
||||||
]
|
]
|
||||||
|
|
||||||
def filter_device(self, queryset, name, value):
|
|
||||||
# Include interfaces belonging to peer virtual chassis members
|
|
||||||
vc_interface_ids = []
|
|
||||||
try:
|
|
||||||
devices = Device.objects.filter(**{'{}__in'.format(name): value})
|
|
||||||
for device in devices:
|
|
||||||
# Hack to show all VC member interfaces when requested
|
|
||||||
if self.request is not None and 'vc_interfaces' in self.request.GET.keys():
|
|
||||||
vc_interface_ids += device.vc_interfaces(if_master=False).values_list('id', flat=True)
|
|
||||||
else:
|
|
||||||
vc_interface_ids.extend(device.vc_interfaces().values_list('id', flat=True))
|
|
||||||
return queryset.filter(pk__in=vc_interface_ids)
|
|
||||||
except Device.DoesNotExist:
|
|
||||||
return queryset.none()
|
|
||||||
|
|
||||||
def filter_kind(self, queryset, name, value):
|
def filter_kind(self, queryset, name, value):
|
||||||
value = value.strip().lower()
|
value = value.strip().lower()
|
||||||
return {
|
return {
|
||||||
|
@ -1107,8 +1107,7 @@ class InterfaceForm(InterfaceCommonForm, ModularDeviceComponentForm):
|
|||||||
required=False,
|
required=False,
|
||||||
label=_('Parent interface'),
|
label=_('Parent interface'),
|
||||||
query_params={
|
query_params={
|
||||||
'device_id': '$device',
|
'virtual_chassis_for_device_id': '$device',
|
||||||
'vc_interfaces': 'all',
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
bridge = DynamicModelChoiceField(
|
bridge = DynamicModelChoiceField(
|
||||||
@ -1116,8 +1115,7 @@ class InterfaceForm(InterfaceCommonForm, ModularDeviceComponentForm):
|
|||||||
required=False,
|
required=False,
|
||||||
label=_('Bridged interface'),
|
label=_('Bridged interface'),
|
||||||
query_params={
|
query_params={
|
||||||
'device_id': '$device',
|
'virtual_chassis_for_device_id': '$device',
|
||||||
'vc_interfaces': 'all',
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
lag = DynamicModelChoiceField(
|
lag = DynamicModelChoiceField(
|
||||||
@ -1125,8 +1123,7 @@ class InterfaceForm(InterfaceCommonForm, ModularDeviceComponentForm):
|
|||||||
required=False,
|
required=False,
|
||||||
label=_('LAG interface'),
|
label=_('LAG interface'),
|
||||||
query_params={
|
query_params={
|
||||||
'device_id': '$device',
|
'virtual_chassis_for_device_id': '$device',
|
||||||
'vc_interfaces': 'all',
|
|
||||||
'type': 'lag',
|
'type': 'lag',
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user