7699 scoped form, fitlerset

This commit is contained in:
Arthur Hanson 2024-10-24 12:53:52 -07:00
parent 8ca7cdd0ad
commit 277b175f9f
4 changed files with 10 additions and 60 deletions

View File

@ -25,6 +25,7 @@ __all__ = (
'ChangeLoggedModelFilterSet', 'ChangeLoggedModelFilterSet',
'NetBoxModelFilterSet', 'NetBoxModelFilterSet',
'OrganizationalModelFilterSet', 'OrganizationalModelFilterSet',
'ScopedFilterSet',
) )
@ -328,7 +329,7 @@ class OrganizationalModelFilterSet(NetBoxModelFilterSet):
) )
class ScopeModelFilterSet(BaseFilterSet): class ScopedFilterSet(BaseFilterSet):
""" """
Provides additional filtering functionality for location, site, etc.. for Scoped models. Provides additional filtering functionality for location, site, etc.. for Scoped models.
""" """

View File

@ -20,7 +20,7 @@ __all__ = (
'NetBoxModelImportForm', 'NetBoxModelImportForm',
'NetBoxModelBulkEditForm', 'NetBoxModelBulkEditForm',
'NetBoxModelFilterSetForm', 'NetBoxModelFilterSetForm',
'ScopeForm', 'ScopedForm',
) )
@ -191,7 +191,7 @@ class NetBoxModelFilterSetForm(CustomFieldsMixin, SavedFiltersMixin, forms.Form)
return customfield.to_form_field(set_initial=False, enforce_required=False, enforce_visibility=False) return customfield.to_form_field(set_initial=False, enforce_required=False, enforce_visibility=False)
class ScopeForm(forms.Form): class ScopedForm(forms.Form):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
instance = kwargs.get('instance') instance = kwargs.get('instance')

View File

@ -3,13 +3,13 @@ from django.db.models import Q
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from dcim.filtersets import CommonInterfaceFilterSet from dcim.filtersets import CommonInterfaceFilterSet
from dcim.models import Device, DeviceRole, Platform, Location, Region, Site, SiteGroup from dcim.models import Device, DeviceRole, Platform, Region, Site, SiteGroup
from extras.filtersets import LocalConfigContextFilterSet from extras.filtersets import LocalConfigContextFilterSet
from extras.models import ConfigTemplate from extras.models import ConfigTemplate
from ipam.filtersets import PrimaryIPFilterSet from ipam.filtersets import PrimaryIPFilterSet
from netbox.filtersets import OrganizationalModelFilterSet, NetBoxModelFilterSet from netbox.filtersets import OrganizationalModelFilterSet, NetBoxModelFilterSet, ScopedFilterSet
from tenancy.filtersets import TenancyFilterSet, ContactModelFilterSet from tenancy.filtersets import TenancyFilterSet, ContactModelFilterSet
from utilities.filters import ContentTypeFilter, MultiValueCharFilter, MultiValueMACAddressFilter, TreeNodeMultipleChoiceFilter from utilities.filters import MultiValueCharFilter, MultiValueMACAddressFilter, TreeNodeMultipleChoiceFilter
from .choices import * from .choices import *
from .models import * from .models import *
@ -37,58 +37,7 @@ class ClusterGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet)
fields = ('id', 'name', 'slug', 'description') fields = ('id', 'name', 'slug', 'description')
class ClusterFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet): class ClusterFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ScopedFilterSet, ContactModelFilterSet):
scope_type = ContentTypeFilter()
region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(),
field_name='_region',
lookup_expr='in',
label=_('Region (ID)'),
)
region = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(),
field_name='_region',
lookup_expr='in',
to_field_name='slug',
label=_('Region (slug)'),
)
site_group_id = TreeNodeMultipleChoiceFilter(
queryset=SiteGroup.objects.all(),
field_name='_sitegroup',
lookup_expr='in',
label=_('Site group (ID)'),
)
site_group = TreeNodeMultipleChoiceFilter(
queryset=SiteGroup.objects.all(),
field_name='_sitegroup',
lookup_expr='in',
to_field_name='slug',
label=_('Site group (slug)'),
)
site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.all(),
field_name='_site',
label=_('Site (ID)'),
)
site = django_filters.ModelMultipleChoiceFilter(
field_name='_site__slug',
queryset=Site.objects.all(),
to_field_name='slug',
label=_('Site (slug)'),
)
location_id = TreeNodeMultipleChoiceFilter(
queryset=Location.objects.all(),
field_name='_location',
lookup_expr='in',
label=_('Location (ID)'),
)
location = TreeNodeMultipleChoiceFilter(
queryset=Location.objects.all(),
field_name='_location',
lookup_expr='in',
to_field_name='slug',
label=_('Location (slug)'),
)
group_id = django_filters.ModelMultipleChoiceFilter( group_id = django_filters.ModelMultipleChoiceFilter(
queryset=ClusterGroup.objects.all(), queryset=ClusterGroup.objects.all(),
label=_('Parent group (ID)'), label=_('Parent group (ID)'),

View File

@ -7,7 +7,7 @@ from dcim.forms.common import InterfaceCommonForm
from dcim.models import Device, DeviceRole, Platform, Rack, Region, Site, SiteGroup from dcim.models import Device, DeviceRole, Platform, Rack, Region, Site, SiteGroup
from extras.models import ConfigTemplate from extras.models import ConfigTemplate
from ipam.models import IPAddress, VLAN, VLANGroup, VRF from ipam.models import IPAddress, VLAN, VLANGroup, VRF
from netbox.forms import NetBoxModelForm, ScopeForm from netbox.forms import NetBoxModelForm, ScopedForm
from tenancy.forms import TenancyForm from tenancy.forms import TenancyForm
from utilities.forms import ConfirmationForm from utilities.forms import ConfirmationForm
from utilities.forms.fields import ( from utilities.forms.fields import (
@ -59,7 +59,7 @@ class ClusterGroupForm(NetBoxModelForm):
) )
class ClusterForm(TenancyForm, ScopeForm, NetBoxModelForm): class ClusterForm(TenancyForm, ScopedForm, NetBoxModelForm):
type = DynamicModelChoiceField( type = DynamicModelChoiceField(
label=_('Type'), label=_('Type'),
queryset=ClusterType.objects.all() queryset=ClusterType.objects.all()