Pass distinct=False to all MultipleChoiceFilters associated with a concrete model

This commit is contained in:
Jeremy Stretch
2026-02-12 16:00:47 -05:00
parent 440793c604
commit 79d963249d
8 changed files with 127 additions and 44 deletions

View File

@@ -209,6 +209,7 @@ class CircuitFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilt
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=CircuitStatusChoices, choices=CircuitStatusChoices,
distinct=False,
null_value=None null_value=None
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
@@ -550,6 +551,7 @@ class VirtualCircuitFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=CircuitStatusChoices, choices=CircuitStatusChoices,
distinct=False,
null_value=None null_value=None
) )
@@ -580,6 +582,7 @@ class VirtualCircuitTerminationFilterSet(NetBoxModelFilterSet):
) )
role = django_filters.MultipleChoiceFilter( role = django_filters.MultipleChoiceFilter(
choices=VirtualCircuitTerminationRoleChoices, choices=VirtualCircuitTerminationRoleChoices,
distinct=False,
null_value=None null_value=None
) )
provider_id = django_filters.ModelMultipleChoiceFilter( provider_id = django_filters.ModelMultipleChoiceFilter(

View File

@@ -25,14 +25,17 @@ __all__ = (
class DataSourceFilterSet(PrimaryModelFilterSet): class DataSourceFilterSet(PrimaryModelFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=get_data_backend_choices, choices=get_data_backend_choices,
distinct=False,
null_value=None null_value=None
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=DataSourceStatusChoices, choices=DataSourceStatusChoices,
distinct=False,
null_value=None null_value=None
) )
sync_interval = django_filters.MultipleChoiceFilter( sync_interval = django_filters.MultipleChoiceFilter(
choices=JobIntervalChoices, choices=JobIntervalChoices,
distinct=False,
null_value=None null_value=None
) )
@@ -130,6 +133,7 @@ class JobFilterSet(BaseFilterSet):
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=JobStatusChoices, choices=JobStatusChoices,
distinct=False,
null_value=None null_value=None
) )
queue_name = django_filters.CharFilter() queue_name = django_filters.CharFilter()

View File

@@ -155,6 +155,7 @@ class SiteGroupFilterSet(NestedGroupModelFilterSet, ContactModelFilterSet):
class SiteFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet): class SiteFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=SiteStatusChoices, choices=SiteStatusChoices,
distinct=False,
null_value=None null_value=None
) )
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
@@ -283,6 +284,7 @@ class LocationFilterSet(TenancyFilterSet, ContactModelFilterSet, NestedGroupMode
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=LocationStatusChoices, choices=LocationStatusChoices,
distinct=False,
null_value=None null_value=None
) )
@@ -323,10 +325,12 @@ class RackTypeFilterSet(PrimaryModelFilterSet):
label=_('Manufacturer (slug)'), label=_('Manufacturer (slug)'),
) )
form_factor = django_filters.MultipleChoiceFilter( form_factor = django_filters.MultipleChoiceFilter(
choices=RackFormFactorChoices choices=RackFormFactorChoices,
distinct=False,
) )
width = django_filters.MultipleChoiceFilter( width = django_filters.MultipleChoiceFilter(
choices=RackWidthChoices choices=RackWidthChoices,
distinct=False,
) )
class Meta: class Meta:
@@ -429,13 +433,16 @@ class RackFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterS
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=RackStatusChoices, choices=RackStatusChoices,
distinct=False,
null_value=None null_value=None
) )
form_factor = django_filters.MultipleChoiceFilter( form_factor = django_filters.MultipleChoiceFilter(
choices=RackFormFactorChoices choices=RackFormFactorChoices,
distinct=False,
) )
width = django_filters.MultipleChoiceFilter( width = django_filters.MultipleChoiceFilter(
choices=RackWidthChoices choices=RackWidthChoices,
distinct=False,
) )
role_id = django_filters.ModelMultipleChoiceFilter( role_id = django_filters.ModelMultipleChoiceFilter(
queryset=RackRole.objects.all(), queryset=RackRole.objects.all(),
@@ -535,6 +542,7 @@ class RackReservationFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=RackReservationStatusChoices, choices=RackReservationStatusChoices,
distinct=False,
null_value=None null_value=None
) )
user_id = django_filters.ModelMultipleChoiceFilter( user_id = django_filters.ModelMultipleChoiceFilter(
@@ -891,6 +899,7 @@ class PowerPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeCo
class PowerOutletTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class PowerOutletTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
feed_leg = django_filters.MultipleChoiceFilter( feed_leg = django_filters.MultipleChoiceFilter(
choices=PowerOutletFeedLegChoices, choices=PowerOutletFeedLegChoices,
distinct=False,
null_value=None null_value=None
) )
power_port_id = django_filters.ModelMultipleChoiceFilter( power_port_id = django_filters.ModelMultipleChoiceFilter(
@@ -908,6 +917,7 @@ class PowerOutletTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceType
class InterfaceTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class InterfaceTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=InterfaceTypeChoices, choices=InterfaceTypeChoices,
distinct=False,
null_value=None null_value=None
) )
bridge_id = django_filters.ModelMultipleChoiceFilter( bridge_id = django_filters.ModelMultipleChoiceFilter(
@@ -916,13 +926,16 @@ class InterfaceTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeCo
distinct=False, distinct=False,
) )
poe_mode = django_filters.MultipleChoiceFilter( poe_mode = django_filters.MultipleChoiceFilter(
choices=InterfacePoEModeChoices choices=InterfacePoEModeChoices,
distinct=False,
) )
poe_type = django_filters.MultipleChoiceFilter( poe_type = django_filters.MultipleChoiceFilter(
choices=InterfacePoETypeChoices choices=InterfacePoETypeChoices,
distinct=False,
) )
rf_role = django_filters.MultipleChoiceFilter( rf_role = django_filters.MultipleChoiceFilter(
choices=WirelessRoleChoices choices=WirelessRoleChoices,
distinct=False,
) )
class Meta: class Meta:
@@ -934,6 +947,7 @@ class InterfaceTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeCo
class FrontPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class FrontPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=PortTypeChoices, choices=PortTypeChoices,
distinct=False,
null_value=None null_value=None
) )
rear_port_id = django_filters.ModelMultipleChoiceFilter( rear_port_id = django_filters.ModelMultipleChoiceFilter(
@@ -952,6 +966,7 @@ class FrontPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeCo
class RearPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class RearPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=PortTypeChoices, choices=PortTypeChoices,
distinct=False,
null_value=None null_value=None
) )
front_port_id = django_filters.ModelMultipleChoiceFilter( front_port_id = django_filters.ModelMultipleChoiceFilter(
@@ -1288,6 +1303,7 @@ class DeviceFilterSet(
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=DeviceStatusChoices, choices=DeviceStatusChoices,
distinct=False,
null_value=None null_value=None
) )
is_full_depth = django_filters.BooleanFilter( is_full_depth = django_filters.BooleanFilter(
@@ -1469,7 +1485,8 @@ class VirtualDeviceContextFilterSet(PrimaryModelFilterSet, TenancyFilterSet, Pri
label=_('Interface (ID)') label=_('Interface (ID)')
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=VirtualDeviceContextStatusChoices choices=VirtualDeviceContextStatusChoices,
distinct=False,
) )
has_primary_ip = django_filters.BooleanFilter( has_primary_ip = django_filters.BooleanFilter(
method='_has_primary_ip', method='_has_primary_ip',
@@ -1614,6 +1631,7 @@ class ModuleFilterSet(PrimaryModelFilterSet):
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=ModuleStatusChoices, choices=ModuleStatusChoices,
distinct=False,
null_value=None null_value=None
) )
serial = MultiValueCharFilter( serial = MultiValueCharFilter(
@@ -1759,6 +1777,7 @@ class DeviceComponentFilterSet(OwnerFilterMixin, NetBoxModelFilterSet):
) )
device_status = django_filters.MultipleChoiceFilter( device_status = django_filters.MultipleChoiceFilter(
choices=DeviceStatusChoices, choices=DeviceStatusChoices,
distinct=False,
field_name='device__status', field_name='device__status',
) )
tenant_id = django_filters.ModelMultipleChoiceFilter( tenant_id = django_filters.ModelMultipleChoiceFilter(
@@ -1835,6 +1854,7 @@ class PathEndpointFilterSet(django_filters.FilterSet):
class ConsolePortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet): class ConsolePortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=ConsolePortTypeChoices, choices=ConsolePortTypeChoices,
distinct=False,
null_value=None null_value=None
) )
@@ -1849,6 +1869,7 @@ class ConsolePortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSe
class ConsoleServerPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet): class ConsoleServerPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=ConsolePortTypeChoices, choices=ConsolePortTypeChoices,
distinct=False,
null_value=None null_value=None
) )
@@ -1863,6 +1884,7 @@ class ConsoleServerPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFi
class PowerPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet): class PowerPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=PowerPortTypeChoices, choices=PowerPortTypeChoices,
distinct=False,
null_value=None null_value=None
) )
@@ -1878,10 +1900,12 @@ class PowerPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet,
class PowerOutletFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet): class PowerOutletFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=PowerOutletTypeChoices, choices=PowerOutletTypeChoices,
distinct=False,
null_value=None null_value=None
) )
feed_leg = django_filters.MultipleChoiceFilter( feed_leg = django_filters.MultipleChoiceFilter(
choices=PowerOutletFeedLegChoices, choices=PowerOutletFeedLegChoices,
distinct=False,
null_value=None null_value=None
) )
power_port_id = django_filters.ModelMultipleChoiceFilter( power_port_id = django_filters.ModelMultipleChoiceFilter(
@@ -1891,6 +1915,7 @@ class PowerOutletFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSe
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=PowerOutletStatusChoices, choices=PowerOutletStatusChoices,
distinct=False,
null_value=None null_value=None
) )
@@ -2019,6 +2044,7 @@ class MACAddressFilterSet(PrimaryModelFilterSet):
class CommonInterfaceFilterSet(django_filters.FilterSet): class CommonInterfaceFilterSet(django_filters.FilterSet):
mode = django_filters.MultipleChoiceFilter( mode = django_filters.MultipleChoiceFilter(
choices=InterfaceModeChoices, choices=InterfaceModeChoices,
distinct=False,
label=_('802.1Q Mode') label=_('802.1Q Mode')
) )
vlan_id = django_filters.CharFilter( vlan_id = django_filters.CharFilter(
@@ -2139,7 +2165,8 @@ class InterfaceFilterSet(
) )
speed = MultiValueNumberFilter() speed = MultiValueNumberFilter()
duplex = django_filters.MultipleChoiceFilter( duplex = django_filters.MultipleChoiceFilter(
choices=InterfaceDuplexChoices choices=InterfaceDuplexChoices,
distinct=False,
) )
mac_address = MultiValueMACAddressFilter( mac_address = MultiValueMACAddressFilter(
field_name='mac_addresses__mac_address', field_name='mac_addresses__mac_address',
@@ -2160,20 +2187,25 @@ class InterfaceFilterSet(
) )
wwn = MultiValueWWNFilter() wwn = MultiValueWWNFilter()
poe_mode = django_filters.MultipleChoiceFilter( poe_mode = django_filters.MultipleChoiceFilter(
choices=InterfacePoEModeChoices choices=InterfacePoEModeChoices,
distinct=False,
) )
poe_type = django_filters.MultipleChoiceFilter( poe_type = django_filters.MultipleChoiceFilter(
choices=InterfacePoETypeChoices choices=InterfacePoETypeChoices,
distinct=False,
) )
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=InterfaceTypeChoices, choices=InterfaceTypeChoices,
distinct=False,
null_value=None null_value=None
) )
rf_role = django_filters.MultipleChoiceFilter( rf_role = django_filters.MultipleChoiceFilter(
choices=WirelessRoleChoices choices=WirelessRoleChoices,
distinct=False,
) )
rf_channel = django_filters.MultipleChoiceFilter( rf_channel = django_filters.MultipleChoiceFilter(
choices=WirelessChannelChoices choices=WirelessChannelChoices,
distinct=False,
) )
vdc_id = django_filters.ModelMultipleChoiceFilter( vdc_id = django_filters.ModelMultipleChoiceFilter(
field_name='vdcs', field_name='vdcs',
@@ -2261,6 +2293,7 @@ class InterfaceFilterSet(
class FrontPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet): class FrontPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=PortTypeChoices, choices=PortTypeChoices,
distinct=False,
null_value=None null_value=None
) )
rear_port_id = django_filters.ModelMultipleChoiceFilter( rear_port_id = django_filters.ModelMultipleChoiceFilter(
@@ -2282,6 +2315,7 @@ class FrontPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet)
class RearPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet): class RearPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=PortTypeChoices, choices=PortTypeChoices,
distinct=False,
null_value=None null_value=None
) )
front_port_id = django_filters.ModelMultipleChoiceFilter( front_port_id = django_filters.ModelMultipleChoiceFilter(
@@ -2375,6 +2409,7 @@ class InventoryItemFilterSet(DeviceComponentFilterSet):
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=InventoryItemStatusChoices, choices=InventoryItemStatusChoices,
distinct=False,
null_value=None null_value=None
) )
@@ -2507,16 +2542,20 @@ class CableFilterSet(TenancyFilterSet, PrimaryModelFilterSet):
label=_('Unterminated'), label=_('Unterminated'),
) )
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=CableTypeChoices choices=CableTypeChoices,
distinct=False,
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=LinkStatusChoices choices=LinkStatusChoices,
distinct=False,
) )
profile = django_filters.MultipleChoiceFilter( profile = django_filters.MultipleChoiceFilter(
choices=CableProfileChoices choices=CableProfileChoices,
distinct=False,
) )
color = django_filters.MultipleChoiceFilter( color = django_filters.MultipleChoiceFilter(
choices=ColorChoices choices=ColorChoices,
distinct=False,
) )
device_id = MultiValueNumberFilter( device_id = MultiValueNumberFilter(
method='filter_by_termination' method='filter_by_termination'
@@ -2783,6 +2822,7 @@ class PowerFeedFilterSet(PrimaryModelFilterSet, CabledObjectFilterSet, PathEndpo
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=PowerFeedStatusChoices, choices=PowerFeedStatusChoices,
distinct=False,
null_value=None null_value=None
) )

View File

@@ -72,7 +72,8 @@ class WebhookFilterSet(OwnerFilterMixin, NetBoxModelFilterSet):
label=_('Search'), label=_('Search'),
) )
http_method = django_filters.MultipleChoiceFilter( http_method = django_filters.MultipleChoiceFilter(
choices=WebhookHttpMethodChoices choices=WebhookHttpMethodChoices,
distinct=False,
) )
payload_url = MultiValueCharFilter( payload_url = MultiValueCharFilter(
lookup_expr='icontains' lookup_expr='icontains'
@@ -112,7 +113,8 @@ class EventRuleFilterSet(OwnerFilterMixin, NetBoxModelFilterSet):
method='filter_event_type' method='filter_event_type'
) )
action_type = django_filters.MultipleChoiceFilter( action_type = django_filters.MultipleChoiceFilter(
choices=EventRuleActionChoices choices=EventRuleActionChoices,
distinct=False,
) )
action_object_type = ContentTypeFilter() action_object_type = ContentTypeFilter()
action_object_id = MultiValueNumberFilter() action_object_id = MultiValueNumberFilter()
@@ -143,7 +145,8 @@ class CustomFieldFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
label=_('Search'), label=_('Search'),
) )
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=CustomFieldTypeChoices choices=CustomFieldTypeChoices,
distinct=False,
) )
object_type_id = django_filters.ModelMultipleChoiceFilter( object_type_id = django_filters.ModelMultipleChoiceFilter(
queryset=ObjectType.objects.all(), queryset=ObjectType.objects.all(),
@@ -512,7 +515,8 @@ class JournalEntryFilterSet(NetBoxModelFilterSet):
label=_('User (name)'), label=_('User (name)'),
) )
kind = django_filters.MultipleChoiceFilter( kind = django_filters.MultipleChoiceFilter(
choices=JournalEntryKindChoices choices=JournalEntryKindChoices,
distinct=False,
) )
class Meta: class Meta:

View File

@@ -406,6 +406,7 @@ class PrefixFilterSet(PrimaryModelFilterSet, ScopedFilterSet, TenancyFilterSet,
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=PrefixStatusChoices, choices=PrefixStatusChoices,
distinct=False,
null_value=None null_value=None
) )
@@ -523,6 +524,7 @@ class IPRangeFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilt
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=IPRangeStatusChoices, choices=IPRangeStatusChoices,
distinct=False,
null_value=None null_value=None
) )
parent = MultiValueCharFilter( parent = MultiValueCharFilter(
@@ -684,10 +686,12 @@ class IPAddressFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFi
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=IPAddressStatusChoices, choices=IPAddressStatusChoices,
distinct=False,
null_value=None null_value=None
) )
role = django_filters.MultipleChoiceFilter( role = django_filters.MultipleChoiceFilter(
choices=IPAddressRoleChoices choices=IPAddressRoleChoices,
distinct=False,
) )
service_id = django_filters.ModelMultipleChoiceFilter( service_id = django_filters.ModelMultipleChoiceFilter(
field_name='services', field_name='services',
@@ -819,10 +823,12 @@ class IPAddressFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFi
@register_filterset @register_filterset
class FHRPGroupFilterSet(PrimaryModelFilterSet): class FHRPGroupFilterSet(PrimaryModelFilterSet):
protocol = django_filters.MultipleChoiceFilter( protocol = django_filters.MultipleChoiceFilter(
choices=FHRPGroupProtocolChoices choices=FHRPGroupProtocolChoices,
distinct=False,
) )
auth_type = django_filters.MultipleChoiceFilter( auth_type = django_filters.MultipleChoiceFilter(
choices=FHRPGroupAuthTypeChoices choices=FHRPGroupAuthTypeChoices,
distinct=False,
) )
related_ip = django_filters.ModelMultipleChoiceFilter( related_ip = django_filters.ModelMultipleChoiceFilter(
queryset=IPAddress.objects.all(), queryset=IPAddress.objects.all(),
@@ -1036,6 +1042,7 @@ class VLANFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=VLANStatusChoices, choices=VLANStatusChoices,
distinct=False,
null_value=None null_value=None
) )
available_at_site = django_filters.ModelChoiceFilter( available_at_site = django_filters.ModelChoiceFilter(
@@ -1051,7 +1058,8 @@ class VLANFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
method='get_for_virtualmachine' method='get_for_virtualmachine'
) )
qinq_role = django_filters.MultipleChoiceFilter( qinq_role = django_filters.MultipleChoiceFilter(
choices=VLANQinQRoleChoices choices=VLANQinQRoleChoices,
distinct=False,
) )
qinq_svlan_id = django_filters.ModelMultipleChoiceFilter( qinq_svlan_id = django_filters.ModelMultipleChoiceFilter(
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),

View File

@@ -71,6 +71,7 @@ class ClusterFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ScopedFilterSet,
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=ClusterStatusChoices, choices=ClusterStatusChoices,
distinct=False,
null_value=None null_value=None
) )
@@ -98,10 +99,12 @@ class VirtualMachineFilterSet(
): ):
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=VirtualMachineStatusChoices, choices=VirtualMachineStatusChoices,
distinct=False,
null_value=None null_value=None
) )
start_on_boot = django_filters.MultipleChoiceFilter( start_on_boot = django_filters.MultipleChoiceFilter(
choices=VirtualMachineStartOnBootChoices, choices=VirtualMachineStartOnBootChoices,
distinct=False,
null_value=None null_value=None
) )
cluster_group_id = django_filters.ModelMultipleChoiceFilter( cluster_group_id = django_filters.ModelMultipleChoiceFilter(

View File

@@ -38,7 +38,8 @@ class TunnelGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
@register_filterset @register_filterset
class TunnelFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet): class TunnelFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=TunnelStatusChoices choices=TunnelStatusChoices,
distinct=False,
) )
group_id = django_filters.ModelMultipleChoiceFilter( group_id = django_filters.ModelMultipleChoiceFilter(
queryset=TunnelGroup.objects.all(), queryset=TunnelGroup.objects.all(),
@@ -53,7 +54,8 @@ class TunnelFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilte
label=_('Tunnel group (slug)'), label=_('Tunnel group (slug)'),
) )
encapsulation = django_filters.MultipleChoiceFilter( encapsulation = django_filters.MultipleChoiceFilter(
choices=TunnelEncapsulationChoices choices=TunnelEncapsulationChoices,
distinct=False,
) )
ipsec_profile_id = django_filters.ModelMultipleChoiceFilter( ipsec_profile_id = django_filters.ModelMultipleChoiceFilter(
queryset=IPSecProfile.objects.all(), queryset=IPSecProfile.objects.all(),
@@ -98,7 +100,8 @@ class TunnelTerminationFilterSet(NetBoxModelFilterSet):
label=_('Tunnel (name)'), label=_('Tunnel (name)'),
) )
role = django_filters.MultipleChoiceFilter( role = django_filters.MultipleChoiceFilter(
choices=TunnelTerminationRoleChoices choices=TunnelTerminationRoleChoices,
distinct=False,
) )
termination_type = ContentTypeFilter() termination_type = ContentTypeFilter()
interface = django_filters.ModelMultipleChoiceFilter( interface = django_filters.ModelMultipleChoiceFilter(
@@ -149,16 +152,20 @@ class IKEProposalFilterSet(PrimaryModelFilterSet):
label=_('IKE policy (name)'), label=_('IKE policy (name)'),
) )
authentication_method = django_filters.MultipleChoiceFilter( authentication_method = django_filters.MultipleChoiceFilter(
choices=AuthenticationMethodChoices choices=AuthenticationMethodChoices,
distinct=False,
) )
encryption_algorithm = django_filters.MultipleChoiceFilter( encryption_algorithm = django_filters.MultipleChoiceFilter(
choices=EncryptionAlgorithmChoices choices=EncryptionAlgorithmChoices,
distinct=False,
) )
authentication_algorithm = django_filters.MultipleChoiceFilter( authentication_algorithm = django_filters.MultipleChoiceFilter(
choices=AuthenticationAlgorithmChoices choices=AuthenticationAlgorithmChoices,
distinct=False,
) )
group = django_filters.MultipleChoiceFilter( group = django_filters.MultipleChoiceFilter(
choices=DHGroupChoices choices=DHGroupChoices,
distinct=False,
) )
class Meta: class Meta:
@@ -178,10 +185,12 @@ class IKEProposalFilterSet(PrimaryModelFilterSet):
@register_filterset @register_filterset
class IKEPolicyFilterSet(PrimaryModelFilterSet): class IKEPolicyFilterSet(PrimaryModelFilterSet):
version = django_filters.MultipleChoiceFilter( version = django_filters.MultipleChoiceFilter(
choices=IKEVersionChoices choices=IKEVersionChoices,
distinct=False,
) )
mode = django_filters.MultipleChoiceFilter( mode = django_filters.MultipleChoiceFilter(
choices=IKEModeChoices choices=IKEModeChoices,
distinct=False,
) )
ike_proposal_id = django_filters.ModelMultipleChoiceFilter( ike_proposal_id = django_filters.ModelMultipleChoiceFilter(
field_name='proposals', field_name='proposals',
@@ -221,10 +230,12 @@ class IPSecProposalFilterSet(PrimaryModelFilterSet):
label=_('IPSec policy (name)'), label=_('IPSec policy (name)'),
) )
encryption_algorithm = django_filters.MultipleChoiceFilter( encryption_algorithm = django_filters.MultipleChoiceFilter(
choices=EncryptionAlgorithmChoices choices=EncryptionAlgorithmChoices,
distinct=False,
) )
authentication_algorithm = django_filters.MultipleChoiceFilter( authentication_algorithm = django_filters.MultipleChoiceFilter(
choices=AuthenticationAlgorithmChoices choices=AuthenticationAlgorithmChoices,
distinct=False,
) )
class Meta: class Meta:
@@ -244,7 +255,8 @@ class IPSecProposalFilterSet(PrimaryModelFilterSet):
@register_filterset @register_filterset
class IPSecPolicyFilterSet(PrimaryModelFilterSet): class IPSecPolicyFilterSet(PrimaryModelFilterSet):
pfs_group = django_filters.MultipleChoiceFilter( pfs_group = django_filters.MultipleChoiceFilter(
choices=DHGroupChoices choices=DHGroupChoices,
distinct=False,
) )
ipsec_proposal_id = django_filters.ModelMultipleChoiceFilter( ipsec_proposal_id = django_filters.ModelMultipleChoiceFilter(
field_name='proposals', field_name='proposals',
@@ -273,7 +285,8 @@ class IPSecPolicyFilterSet(PrimaryModelFilterSet):
@register_filterset @register_filterset
class IPSecProfileFilterSet(PrimaryModelFilterSet): class IPSecProfileFilterSet(PrimaryModelFilterSet):
mode = django_filters.MultipleChoiceFilter( mode = django_filters.MultipleChoiceFilter(
choices=IPSecModeChoices choices=IPSecModeChoices,
distinct=False,
) )
ike_policy_id = django_filters.ModelMultipleChoiceFilter( ike_policy_id = django_filters.ModelMultipleChoiceFilter(
queryset=IKEPolicy.objects.all(), queryset=IKEPolicy.objects.all(),
@@ -318,10 +331,12 @@ class IPSecProfileFilterSet(PrimaryModelFilterSet):
class L2VPNFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet): class L2VPNFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=L2VPNTypeChoices, choices=L2VPNTypeChoices,
distinct=False,
null_value=None null_value=None
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=L2VPNStatusChoices, choices=L2VPNStatusChoices,
distinct=False,
) )
import_target_id = django_filters.ModelMultipleChoiceFilter( import_target_id = django_filters.ModelMultipleChoiceFilter(
field_name='import_targets', field_name='import_targets',

View File

@@ -62,7 +62,8 @@ class WirelessLANFilterSet(PrimaryModelFilterSet, ScopedFilterSet, TenancyFilter
to_field_name='slug' to_field_name='slug'
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=WirelessLANStatusChoices choices=WirelessLANStatusChoices,
distinct=False,
) )
vlan_id = django_filters.ModelMultipleChoiceFilter( vlan_id = django_filters.ModelMultipleChoiceFilter(
queryset=VLAN.objects.all(), queryset=VLAN.objects.all(),
@@ -73,10 +74,12 @@ class WirelessLANFilterSet(PrimaryModelFilterSet, ScopedFilterSet, TenancyFilter
field_name='interfaces' field_name='interfaces'
) )
auth_type = django_filters.MultipleChoiceFilter( auth_type = django_filters.MultipleChoiceFilter(
choices=WirelessAuthTypeChoices choices=WirelessAuthTypeChoices,
distinct=False,
) )
auth_cipher = django_filters.MultipleChoiceFilter( auth_cipher = django_filters.MultipleChoiceFilter(
choices=WirelessAuthCipherChoices choices=WirelessAuthCipherChoices,
distinct=False,
) )
class Meta: class Meta:
@@ -104,13 +107,16 @@ class WirelessLinkFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
distinct=False, distinct=False,
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=LinkStatusChoices choices=LinkStatusChoices,
distinct=False,
) )
auth_type = django_filters.MultipleChoiceFilter( auth_type = django_filters.MultipleChoiceFilter(
choices=WirelessAuthTypeChoices choices=WirelessAuthTypeChoices,
distinct=False,
) )
auth_cipher = django_filters.MultipleChoiceFilter( auth_cipher = django_filters.MultipleChoiceFilter(
choices=WirelessAuthCipherChoices choices=WirelessAuthCipherChoices,
distinct=False,
) )
class Meta: class Meta: