From cd485a5c91309b95ae97d67591196cd2343ff25e Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 21 Oct 2025 16:45:35 -0400 Subject: [PATCH] Add owner field to all applicable filterset forms --- netbox/circuits/forms/filtersets.py | 18 ++++---- netbox/core/forms/filtersets.py | 4 +- netbox/dcim/forms/filtersets.py | 52 +++++++++++------------ netbox/extras/forms/filtersets.py | 26 ++++++------ netbox/ipam/forms/filtersets.py | 32 +++++++------- netbox/netbox/forms/filtersets.py | 33 ++++++++++---- netbox/tenancy/forms/filtersets.py | 15 ++++--- netbox/virtualization/forms/filtersets.py | 10 ++--- netbox/vpn/forms/filtersets.py | 18 ++++---- netbox/wireless/forms/filtersets.py | 8 ++-- 10 files changed, 118 insertions(+), 98 deletions(-) diff --git a/netbox/circuits/forms/filtersets.py b/netbox/circuits/forms/filtersets.py index 73adb26c5..c71f5c65c 100644 --- a/netbox/circuits/forms/filtersets.py +++ b/netbox/circuits/forms/filtersets.py @@ -9,7 +9,7 @@ from circuits.models import * from dcim.models import Location, Region, Site, SiteGroup from ipam.models import ASN from netbox.choices import DistanceUnitChoices -from netbox.forms import NetBoxModelFilterSetForm +from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm from tenancy.forms import TenancyFilterForm, ContactModelFilterForm from utilities.forms import add_blank_choice from utilities.forms.fields import ColorField, DynamicModelMultipleChoiceField, TagFilterField @@ -31,7 +31,7 @@ __all__ = ( ) -class ProviderFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): +class ProviderFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm): model = Provider fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -66,7 +66,7 @@ class ProviderFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class ProviderAccountFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): +class ProviderAccountFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm): model = ProviderAccount fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -85,7 +85,7 @@ class ProviderAccountFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm tag = TagFilterField(model) -class ProviderNetworkFilterForm(NetBoxModelFilterSetForm): +class ProviderNetworkFilterForm(PrimaryModelFilterSetForm): model = ProviderNetwork fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -104,7 +104,7 @@ class ProviderNetworkFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class CircuitTypeFilterForm(NetBoxModelFilterSetForm): +class CircuitTypeFilterForm(OrganizationalModelFilterSetForm): model = CircuitType fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -118,7 +118,7 @@ class CircuitTypeFilterForm(NetBoxModelFilterSetForm): ) -class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFilterSetForm): +class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm): model = Circuit fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -271,7 +271,7 @@ class CircuitTerminationFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class CircuitGroupFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class CircuitGroupFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm): model = CircuitGroup fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -309,7 +309,7 @@ class CircuitGroupAssignmentFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class VirtualCircuitTypeFilterForm(NetBoxModelFilterSetForm): +class VirtualCircuitTypeFilterForm(OrganizationalModelFilterSetForm): model = VirtualCircuitType fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -323,7 +323,7 @@ class VirtualCircuitTypeFilterForm(NetBoxModelFilterSetForm): ) -class VirtualCircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFilterSetForm): +class VirtualCircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm): model = VirtualCircuit fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), diff --git a/netbox/core/forms/filtersets.py b/netbox/core/forms/filtersets.py index 40ee399b5..f403d838c 100644 --- a/netbox/core/forms/filtersets.py +++ b/netbox/core/forms/filtersets.py @@ -3,7 +3,7 @@ from django.utils.translation import gettext_lazy as _ from core.choices import * from core.models import * -from netbox.forms import NetBoxModelFilterSetForm +from netbox.forms import NetBoxModelFilterSetForm, PrimaryModelFilterSetForm from netbox.forms.mixins import SavedFiltersMixin from netbox.utils import get_data_backend_choices from users.models import User @@ -23,7 +23,7 @@ __all__ = ( ) -class DataSourceFilterForm(NetBoxModelFilterSetForm): +class DataSourceFilterForm(PrimaryModelFilterSetForm): model = DataSource fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), diff --git a/netbox/dcim/forms/filtersets.py b/netbox/dcim/forms/filtersets.py index 14a51ad78..50dff23b4 100644 --- a/netbox/dcim/forms/filtersets.py +++ b/netbox/dcim/forms/filtersets.py @@ -8,7 +8,10 @@ from extras.forms import LocalConfigContextFilterForm from extras.models import ConfigTemplate from ipam.models import ASN, VRF, VLANTranslationPolicy from netbox.choices import * -from netbox.forms import NetBoxModelFilterSetForm +from netbox.forms import ( + NestedGroupModelFilterSetForm, NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, + PrimaryModelFilterSetForm, +) from tenancy.forms import ContactModelFilterForm, TenancyFilterForm from users.models import User from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice @@ -139,7 +142,7 @@ class DeviceComponentFilterForm(NetBoxModelFilterSetForm): ) -class RegionFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): +class RegionFilterForm(ContactModelFilterForm, NestedGroupModelFilterSetForm): model = Region fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -154,7 +157,7 @@ class RegionFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class SiteGroupFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): +class SiteGroupFilterForm(ContactModelFilterForm, NestedGroupModelFilterSetForm): model = SiteGroup fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -169,7 +172,7 @@ class SiteGroupFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class SiteFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFilterSetForm): +class SiteFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm): model = Site fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -201,7 +204,7 @@ class SiteFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFilte tag = TagFilterField(model) -class LocationFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFilterSetForm): +class LocationFilterForm(TenancyFilterForm, ContactModelFilterForm, NestedGroupModelFilterSetForm): model = Location fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -249,7 +252,7 @@ class LocationFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelF tag = TagFilterField(model) -class RackRoleFilterForm(NetBoxModelFilterSetForm): +class RackRoleFilterForm(OrganizationalModelFilterSetForm): model = RackRole fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -257,7 +260,7 @@ class RackRoleFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class RackBaseFilterForm(NetBoxModelFilterSetForm): +class RackBaseFilterForm(PrimaryModelFilterSetForm): form_factor = forms.MultipleChoiceField( label=_('Form factor'), choices=RackFormFactorChoices, @@ -418,7 +421,7 @@ class RackElevationFilterForm(RackFilterForm): ) -class RackReservationFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class RackReservationFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): model = RackReservation fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -476,7 +479,7 @@ class RackReservationFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class ManufacturerFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): +class ManufacturerFilterForm(ContactModelFilterForm, OrganizationalModelFilterSetForm): model = Manufacturer fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -485,7 +488,7 @@ class ManufacturerFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class DeviceTypeFilterForm(NetBoxModelFilterSetForm): +class DeviceTypeFilterForm(PrimaryModelFilterSetForm): model = DeviceType fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -613,7 +616,7 @@ class DeviceTypeFilterForm(NetBoxModelFilterSetForm): ) -class ModuleTypeProfileFilterForm(NetBoxModelFilterSetForm): +class ModuleTypeProfileFilterForm(PrimaryModelFilterSetForm): model = ModuleTypeProfile fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -621,7 +624,7 @@ class ModuleTypeProfileFilterForm(NetBoxModelFilterSetForm): selector_fields = ('filter_id', 'q') -class ModuleTypeFilterForm(NetBoxModelFilterSetForm): +class ModuleTypeFilterForm(PrimaryModelFilterSetForm): model = ModuleType fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -706,7 +709,7 @@ class ModuleTypeFilterForm(NetBoxModelFilterSetForm): ) -class DeviceRoleFilterForm(NetBoxModelFilterSetForm): +class DeviceRoleFilterForm(NestedGroupModelFilterSetForm): model = DeviceRole fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -725,7 +728,7 @@ class DeviceRoleFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class PlatformFilterForm(NetBoxModelFilterSetForm): +class PlatformFilterForm(NestedGroupModelFilterSetForm): model = Platform fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -754,7 +757,7 @@ class DeviceFilterForm( LocalConfigContextFilterForm, TenancyFilterForm, ContactModelFilterForm, - NetBoxModelFilterSetForm + PrimaryModelFilterSetForm ): model = Device fieldsets = ( @@ -948,10 +951,7 @@ class DeviceFilterForm( tag = TagFilterField(model) -class VirtualDeviceContextFilterForm( - TenancyFilterForm, - NetBoxModelFilterSetForm -): +class VirtualDeviceContextFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): model = VirtualDeviceContext fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -978,7 +978,7 @@ class VirtualDeviceContextFilterForm( tag = TagFilterField(model) -class ModuleFilterForm(LocalConfigContextFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm): +class ModuleFilterForm(LocalConfigContextFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): model = Module fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -1061,7 +1061,7 @@ class ModuleFilterForm(LocalConfigContextFilterForm, TenancyFilterForm, NetBoxMo tag = TagFilterField(model) -class VirtualChassisFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class VirtualChassisFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): model = VirtualChassis fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -1090,7 +1090,7 @@ class VirtualChassisFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class CableFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class CableFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): model = Cable fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -1174,7 +1174,7 @@ class CableFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class PowerPanelFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): +class PowerPanelFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm): model = PowerPanel fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -1213,7 +1213,7 @@ class PowerPanelFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class PowerFeedFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class PowerFeedFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): model = PowerFeed fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -1676,7 +1676,7 @@ class InventoryItemFilterForm(DeviceComponentFilterForm): # Device component roles # -class InventoryItemRoleFilterForm(NetBoxModelFilterSetForm): +class InventoryItemRoleFilterForm(OrganizationalModelFilterSetForm): model = InventoryItemRole fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -1688,7 +1688,7 @@ class InventoryItemRoleFilterForm(NetBoxModelFilterSetForm): # Addressing # -class MACAddressFilterForm(NetBoxModelFilterSetForm): +class MACAddressFilterForm(PrimaryModelFilterSetForm): model = MACAddress fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), diff --git a/netbox/extras/forms/filtersets.py b/netbox/extras/forms/filtersets.py index c542b6404..72b6587dc 100644 --- a/netbox/extras/forms/filtersets.py +++ b/netbox/extras/forms/filtersets.py @@ -6,8 +6,8 @@ from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site from extras.choices import * from extras.models import * from netbox.events import get_event_type_choices -from netbox.forms import NetBoxModelFilterSetForm -from netbox.forms.mixins import SavedFiltersMixin +from netbox.forms import NetBoxModelFilterSetForm, PrimaryModelFilterSetForm +from netbox.forms.mixins import OwnerMixin, SavedFiltersMixin from tenancy.models import Tenant, TenantGroup from users.models import Group, User from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice @@ -38,7 +38,7 @@ __all__ = ( ) -class CustomFieldFilterForm(SavedFiltersMixin, FilterForm): +class CustomFieldFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm): model = CustomField fieldsets = ( FieldSet('q', 'filter_id'), @@ -117,7 +117,7 @@ class CustomFieldFilterForm(SavedFiltersMixin, FilterForm): ) -class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, FilterForm): +class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm): model = CustomFieldChoiceSet fieldsets = ( FieldSet('q', 'filter_id'), @@ -132,7 +132,7 @@ class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, FilterForm): ) -class CustomLinkFilterForm(SavedFiltersMixin, FilterForm): +class CustomLinkFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm): model = CustomLink fieldsets = ( FieldSet('q', 'filter_id'), @@ -163,7 +163,7 @@ class CustomLinkFilterForm(SavedFiltersMixin, FilterForm): ) -class ExportTemplateFilterForm(SavedFiltersMixin, FilterForm): +class ExportTemplateFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm): model = ExportTemplate fieldsets = ( FieldSet('q', 'filter_id', 'object_type_id'), @@ -226,7 +226,7 @@ class ImageAttachmentFilterForm(SavedFiltersMixin, FilterForm): ) -class SavedFilterFilterForm(SavedFiltersMixin, FilterForm): +class SavedFilterFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm): model = SavedFilter fieldsets = ( FieldSet('q', 'filter_id'), @@ -287,7 +287,7 @@ class TableConfigFilterForm(SavedFiltersMixin, FilterForm): ) -class WebhookFilterForm(NetBoxModelFilterSetForm): +class WebhookFilterForm(OwnerMixin, NetBoxModelFilterSetForm): model = Webhook fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -309,7 +309,7 @@ class WebhookFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class EventRuleFilterForm(NetBoxModelFilterSetForm): +class EventRuleFilterForm(OwnerMixin, NetBoxModelFilterSetForm): model = EventRule fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -340,7 +340,7 @@ class EventRuleFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class TagFilterForm(SavedFiltersMixin, FilterForm): +class TagFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm): model = Tag content_type_id = ContentTypeMultipleChoiceField( queryset=ObjectType.objects.with_feature('tags'), @@ -354,7 +354,7 @@ class TagFilterForm(SavedFiltersMixin, FilterForm): ) -class ConfigContextProfileFilterForm(SavedFiltersMixin, FilterForm): +class ConfigContextProfileFilterForm(PrimaryModelFilterSetForm): model = ConfigContextProfile fieldsets = ( FieldSet('q', 'filter_id'), @@ -375,7 +375,7 @@ class ConfigContextProfileFilterForm(SavedFiltersMixin, FilterForm): ) -class ConfigContextFilterForm(SavedFiltersMixin, FilterForm): +class ConfigContextFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm): model = ConfigContext fieldsets = ( FieldSet('q', 'filter_id', 'tag_id'), @@ -471,7 +471,7 @@ class ConfigContextFilterForm(SavedFiltersMixin, FilterForm): ) -class ConfigTemplateFilterForm(SavedFiltersMixin, FilterForm): +class ConfigTemplateFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm): model = ConfigTemplate fieldsets = ( FieldSet('q', 'filter_id', 'tag'), diff --git a/netbox/ipam/forms/filtersets.py b/netbox/ipam/forms/filtersets.py index cbded7450..85b0f825d 100644 --- a/netbox/ipam/forms/filtersets.py +++ b/netbox/ipam/forms/filtersets.py @@ -5,7 +5,7 @@ from dcim.models import Location, Rack, Region, Site, SiteGroup, Device from ipam.choices import * from ipam.constants import * from ipam.models import * -from netbox.forms import NetBoxModelFilterSetForm +from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm from tenancy.forms import ContactModelFilterForm, TenancyFilterForm from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField @@ -42,7 +42,7 @@ IPADDRESS_MASK_LENGTH_CHOICES = add_blank_choice([ ]) -class VRFFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class VRFFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): model = VRF fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -62,7 +62,7 @@ class VRFFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class RouteTargetFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class RouteTargetFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): model = RouteTarget fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -82,7 +82,7 @@ class RouteTargetFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class RIRFilterForm(NetBoxModelFilterSetForm): +class RIRFilterForm(OrganizationalModelFilterSetForm): model = RIR fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -98,7 +98,7 @@ class RIRFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class AggregateFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm): +class AggregateFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): model = Aggregate fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -119,7 +119,7 @@ class AggregateFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModel tag = TagFilterField(model) -class ASNRangeFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class ASNRangeFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm): model = ASNRange fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -142,7 +142,7 @@ class ASNRangeFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class ASNFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class ASNFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): model = ASN fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -167,7 +167,7 @@ class ASNFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class RoleFilterForm(NetBoxModelFilterSetForm): +class RoleFilterForm(OrganizationalModelFilterSetForm): model = Role fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -175,7 +175,7 @@ class RoleFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class PrefixFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm, ): +class PrefixFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): model = Prefix fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -281,7 +281,7 @@ class PrefixFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFil tag = TagFilterField(model) -class IPRangeFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm): +class IPRangeFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): model = IPRange fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -328,7 +328,7 @@ class IPRangeFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFi tag = TagFilterField(model) -class IPAddressFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm): +class IPAddressFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): model = IPAddress fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -406,7 +406,7 @@ class IPAddressFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModel tag = TagFilterField(model) -class FHRPGroupFilterForm(NetBoxModelFilterSetForm): +class FHRPGroupFilterForm(PrimaryModelFilterSetForm): model = FHRPGroup fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -439,7 +439,7 @@ class FHRPGroupFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class VLANGroupFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class VLANGroupFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm): fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), FieldSet('region', 'site_group', 'site', 'location', 'rack', name=_('Location')), @@ -492,7 +492,7 @@ class VLANGroupFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class VLANTranslationPolicyFilterForm(NetBoxModelFilterSetForm): +class VLANTranslationPolicyFilterForm(PrimaryModelFilterSetForm): model = VLANTranslationPolicy fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -529,7 +529,7 @@ class VLANTranslationRuleFilterForm(NetBoxModelFilterSetForm): ) -class VLANFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class VLANFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): model = VLAN fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -601,7 +601,7 @@ class VLANFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class ServiceTemplateFilterForm(NetBoxModelFilterSetForm): +class ServiceTemplateFilterForm(PrimaryModelFilterSetForm): model = ServiceTemplate fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), diff --git a/netbox/netbox/forms/filtersets.py b/netbox/netbox/forms/filtersets.py index fb4e496c8..5d0a84b53 100644 --- a/netbox/netbox/forms/filtersets.py +++ b/netbox/netbox/forms/filtersets.py @@ -3,12 +3,13 @@ from django.db.models import Q from django.utils.translation import gettext_lazy as _ from extras.choices import * -from users.models import Owner -from utilities.forms.fields import DynamicModelMultipleChoiceField -from .mixins import CustomFieldsMixin, SavedFiltersMixin +from .mixins import CustomFieldsMixin, OwnerMixin, SavedFiltersMixin __all__ = ( + 'NestedGroupModelFilterSetForm', 'NetBoxModelFilterSetForm', + 'OrganizationalModelFilterSetForm', + 'PrimaryModelFilterSetForm', ) @@ -28,11 +29,6 @@ class NetBoxModelFilterSetForm(CustomFieldsMixin, SavedFiltersMixin, forms.Form) required=False, label=_('Search') ) - owner_id = DynamicModelMultipleChoiceField( - queryset=Owner.objects.all(), - required=False, - label=_('Owner'), - ) selector_fields = ('filter_id', 'q') @@ -44,3 +40,24 @@ class NetBoxModelFilterSetForm(CustomFieldsMixin, SavedFiltersMixin, forms.Form) def _get_form_field(self, customfield): return customfield.to_form_field(set_initial=False, enforce_required=False, enforce_visibility=False) + + +class PrimaryModelFilterSetForm(OwnerMixin, NetBoxModelFilterSetForm): + """ + FilterSet form for models which inherit from PrimaryModel. + """ + pass + + +class OrganizationalModelFilterSetForm(OwnerMixin, NetBoxModelFilterSetForm): + """ + FilterSet form for models which inherit from OrganizationalModel. + """ + pass + + +class NestedGroupModelFilterSetForm(OwnerMixin, NetBoxModelFilterSetForm): + """ + FilterSet form for models which inherit from NestedGroupModel. + """ + pass diff --git a/netbox/tenancy/forms/filtersets.py b/netbox/tenancy/forms/filtersets.py index 90dca5848..239a765c6 100644 --- a/netbox/tenancy/forms/filtersets.py +++ b/netbox/tenancy/forms/filtersets.py @@ -2,7 +2,10 @@ from django import forms from django.utils.translation import gettext_lazy as _ from core.models import ObjectType -from netbox.forms import NetBoxModelFilterSetForm +from netbox.forms import ( + NestedGroupModelFilterSetForm, NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, + PrimaryModelFilterSetForm, +) from tenancy.choices import * from tenancy.models import * from tenancy.forms import ContactModelFilterForm @@ -25,7 +28,7 @@ __all__ = ( # Tenants # -class TenantGroupFilterForm(NetBoxModelFilterSetForm): +class TenantGroupFilterForm(NestedGroupModelFilterSetForm): model = TenantGroup fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -39,7 +42,7 @@ class TenantGroupFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class TenantFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): +class TenantFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm): model = Tenant fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -59,7 +62,7 @@ class TenantFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): # Contacts # -class ContactGroupFilterForm(NetBoxModelFilterSetForm): +class ContactGroupFilterForm(NestedGroupModelFilterSetForm): model = ContactGroup fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -73,7 +76,7 @@ class ContactGroupFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class ContactRoleFilterForm(NetBoxModelFilterSetForm): +class ContactRoleFilterForm(OrganizationalModelFilterSetForm): model = ContactRole fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -81,7 +84,7 @@ class ContactRoleFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class ContactFilterForm(NetBoxModelFilterSetForm): +class ContactFilterForm(PrimaryModelFilterSetForm): model = Contact fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), diff --git a/netbox/virtualization/forms/filtersets.py b/netbox/virtualization/forms/filtersets.py index 43f10b09e..6741499c0 100644 --- a/netbox/virtualization/forms/filtersets.py +++ b/netbox/virtualization/forms/filtersets.py @@ -6,7 +6,7 @@ from dcim.models import Device, DeviceRole, Location, Platform, Region, Site, Si from extras.forms import LocalConfigContextFilterForm from extras.models import ConfigTemplate from ipam.models import VRF, VLANTranslationPolicy -from netbox.forms import NetBoxModelFilterSetForm +from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm from tenancy.forms import ContactModelFilterForm, TenancyFilterForm from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField @@ -25,7 +25,7 @@ __all__ = ( ) -class ClusterTypeFilterForm(NetBoxModelFilterSetForm): +class ClusterTypeFilterForm(OrganizationalModelFilterSetForm): model = ClusterType fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -33,7 +33,7 @@ class ClusterTypeFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class ClusterGroupFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): +class ClusterGroupFilterForm(ContactModelFilterForm, OrganizationalModelFilterSetForm): model = ClusterGroup tag = TagFilterField(model) fieldsets = ( @@ -42,7 +42,7 @@ class ClusterGroupFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): ) -class ClusterFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFilterSetForm): +class ClusterFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm): model = Cluster fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -100,7 +100,7 @@ class VirtualMachineFilterForm( LocalConfigContextFilterForm, TenancyFilterForm, ContactModelFilterForm, - NetBoxModelFilterSetForm + PrimaryModelFilterSetForm ): model = VirtualMachine fieldsets = ( diff --git a/netbox/vpn/forms/filtersets.py b/netbox/vpn/forms/filtersets.py index 6a4d91a0c..4085d9ac5 100644 --- a/netbox/vpn/forms/filtersets.py +++ b/netbox/vpn/forms/filtersets.py @@ -4,7 +4,7 @@ from django.utils.translation import gettext as _ from dcim.models import Device, Region, Site from ipam.models import RouteTarget, VLAN -from netbox.forms import NetBoxModelFilterSetForm +from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm from tenancy.forms import ContactModelFilterForm, TenancyFilterForm from utilities.forms.fields import ( ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField, @@ -30,7 +30,7 @@ __all__ = ( ) -class TunnelGroupFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): +class TunnelGroupFilterForm(ContactModelFilterForm, OrganizationalModelFilterSetForm): model = TunnelGroup fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -39,7 +39,7 @@ class TunnelGroupFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class TunnelFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm): +class TunnelFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): model = Tunnel fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -94,7 +94,7 @@ class TunnelTerminationFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class IKEProposalFilterForm(NetBoxModelFilterSetForm): +class IKEProposalFilterForm(PrimaryModelFilterSetForm): model = IKEProposal fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -125,7 +125,7 @@ class IKEProposalFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class IKEPolicyFilterForm(NetBoxModelFilterSetForm): +class IKEPolicyFilterForm(PrimaryModelFilterSetForm): model = IKEPolicy fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -149,7 +149,7 @@ class IKEPolicyFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class IPSecProposalFilterForm(NetBoxModelFilterSetForm): +class IPSecProposalFilterForm(PrimaryModelFilterSetForm): model = IPSecProposal fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -168,7 +168,7 @@ class IPSecProposalFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class IPSecPolicyFilterForm(NetBoxModelFilterSetForm): +class IPSecPolicyFilterForm(PrimaryModelFilterSetForm): model = IPSecPolicy fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -187,7 +187,7 @@ class IPSecPolicyFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class IPSecProfileFilterForm(NetBoxModelFilterSetForm): +class IPSecProfileFilterForm(PrimaryModelFilterSetForm): model = IPSecProfile fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -211,7 +211,7 @@ class IPSecProfileFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class L2VPNFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm): +class L2VPNFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): model = L2VPN fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), diff --git a/netbox/wireless/forms/filtersets.py b/netbox/wireless/forms/filtersets.py index 4311eb2f7..171a7d8b6 100644 --- a/netbox/wireless/forms/filtersets.py +++ b/netbox/wireless/forms/filtersets.py @@ -4,7 +4,7 @@ from django.utils.translation import gettext_lazy as _ from dcim.choices import LinkStatusChoices from dcim.models import Location, Region, Site, SiteGroup from netbox.choices import * -from netbox.forms import NetBoxModelFilterSetForm +from netbox.forms import NestedGroupModelFilterSetForm, PrimaryModelFilterSetForm from tenancy.forms import TenancyFilterForm from utilities.forms import add_blank_choice from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField @@ -19,7 +19,7 @@ __all__ = ( ) -class WirelessLANGroupFilterForm(NetBoxModelFilterSetForm): +class WirelessLANGroupFilterForm(NestedGroupModelFilterSetForm): model = WirelessLANGroup fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -33,7 +33,7 @@ class WirelessLANGroupFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class WirelessLANFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class WirelessLANFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): model = WirelessLAN fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'), @@ -99,7 +99,7 @@ class WirelessLANFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class WirelessLinkFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class WirelessLinkFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): model = WirelessLink fieldsets = ( FieldSet('q', 'filter_id', 'tag', 'owner_id'),