mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-31 21:06:25 -06:00
Update prefix filters
This commit is contained in:
parent
f34818df71
commit
fad3457d36
@ -9,7 +9,7 @@ from drf_spectacular.utils import extend_schema_field
|
|||||||
from netaddr.core import AddrFormatError
|
from netaddr.core import AddrFormatError
|
||||||
|
|
||||||
from circuits.models import Provider
|
from circuits.models import Provider
|
||||||
from dcim.models import Device, Interface, Region, Site, SiteGroup
|
from dcim.models import Device, Interface, Location, Region, Site, SiteGroup
|
||||||
from netbox.filtersets import ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, NetBoxModelFilterSet
|
from netbox.filtersets import ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, NetBoxModelFilterSet
|
||||||
from tenancy.filtersets import TenancyFilterSet
|
from tenancy.filtersets import TenancyFilterSet
|
||||||
from utilities.filters import (
|
from utilities.filters import (
|
||||||
@ -332,42 +332,57 @@ class PrefixFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
|
|||||||
to_field_name='rd',
|
to_field_name='rd',
|
||||||
label=_('VRF (RD)'),
|
label=_('VRF (RD)'),
|
||||||
)
|
)
|
||||||
# region_id = TreeNodeMultipleChoiceFilter(
|
scope_type = ContentTypeFilter()
|
||||||
# queryset=Region.objects.all(),
|
region_id = TreeNodeMultipleChoiceFilter(
|
||||||
# field_name='site__region',
|
queryset=Region.objects.all(),
|
||||||
# lookup_expr='in',
|
field_name='_region',
|
||||||
# label=_('Region (ID)'),
|
lookup_expr='in',
|
||||||
# )
|
label=_('Region (ID)'),
|
||||||
# region = TreeNodeMultipleChoiceFilter(
|
)
|
||||||
# queryset=Region.objects.all(),
|
region = TreeNodeMultipleChoiceFilter(
|
||||||
# field_name='site__region',
|
queryset=Region.objects.all(),
|
||||||
# lookup_expr='in',
|
field_name='_region',
|
||||||
# to_field_name='slug',
|
lookup_expr='in',
|
||||||
# label=_('Region (slug)'),
|
to_field_name='slug',
|
||||||
# )
|
label=_('Region (slug)'),
|
||||||
# site_group_id = TreeNodeMultipleChoiceFilter(
|
)
|
||||||
# queryset=SiteGroup.objects.all(),
|
site_group_id = TreeNodeMultipleChoiceFilter(
|
||||||
# field_name='site__group',
|
queryset=SiteGroup.objects.all(),
|
||||||
# lookup_expr='in',
|
field_name='_sitegroup',
|
||||||
# label=_('Site group (ID)'),
|
lookup_expr='in',
|
||||||
# )
|
label=_('Site group (ID)'),
|
||||||
# site_group = TreeNodeMultipleChoiceFilter(
|
)
|
||||||
# queryset=SiteGroup.objects.all(),
|
site_group = TreeNodeMultipleChoiceFilter(
|
||||||
# field_name='site__group',
|
queryset=SiteGroup.objects.all(),
|
||||||
# lookup_expr='in',
|
field_name='_sitegroup',
|
||||||
# to_field_name='slug',
|
lookup_expr='in',
|
||||||
# label=_('Site group (slug)'),
|
to_field_name='slug',
|
||||||
# )
|
label=_('Site group (slug)'),
|
||||||
# site_id = django_filters.ModelMultipleChoiceFilter(
|
)
|
||||||
# queryset=Site.objects.all(),
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
||||||
# label=_('Site (ID)'),
|
queryset=Site.objects.all(),
|
||||||
# )
|
field_name='_site',
|
||||||
# site = django_filters.ModelMultipleChoiceFilter(
|
label=_('Site (ID)'),
|
||||||
# field_name='site__slug',
|
)
|
||||||
# queryset=Site.objects.all(),
|
site = django_filters.ModelMultipleChoiceFilter(
|
||||||
# to_field_name='slug',
|
field_name='_site__slug',
|
||||||
# label=_('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)'),
|
||||||
|
)
|
||||||
vlan_id = django_filters.ModelMultipleChoiceFilter(
|
vlan_id = django_filters.ModelMultipleChoiceFilter(
|
||||||
queryset=VLAN.objects.all(),
|
queryset=VLAN.objects.all(),
|
||||||
label=_('VLAN (ID)'),
|
label=_('VLAN (ID)'),
|
||||||
@ -393,7 +408,7 @@ class PrefixFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Prefix
|
model = Prefix
|
||||||
fields = ('id', 'is_pool', 'mark_utilized', 'description')
|
fields = ('id', 'scope_id', 'is_pool', 'mark_utilized', 'description')
|
||||||
|
|
||||||
def search(self, queryset, name, value):
|
def search(self, queryset, name, value):
|
||||||
if not value.strip():
|
if not value.strip():
|
||||||
|
@ -8,9 +8,10 @@ def copy_site_assignments(apps, schema_editor):
|
|||||||
"""
|
"""
|
||||||
ContentType = apps.get_model('contenttypes', 'ContentType')
|
ContentType = apps.get_model('contenttypes', 'ContentType')
|
||||||
Prefix = apps.get_model('ipam', 'Prefix')
|
Prefix = apps.get_model('ipam', 'Prefix')
|
||||||
|
Site = apps.get_model('dcim', 'Site')
|
||||||
|
|
||||||
Prefix.objects.filter(site__isnull=False).update(
|
Prefix.objects.filter(site__isnull=False).update(
|
||||||
scope_type=ContentType.objects.get_by_natural_key('dcim', 'site'),
|
scope_type=ContentType.objects.get_for_model(Site),
|
||||||
scope_id=models.F('site_id')
|
scope_id=models.F('site_id')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -656,14 +656,14 @@ class PrefixTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
Tenant.objects.bulk_create(tenants)
|
Tenant.objects.bulk_create(tenants)
|
||||||
|
|
||||||
prefixes = (
|
prefixes = (
|
||||||
Prefix(prefix='10.0.0.0/24', tenant=None, site=None, vrf=None, vlan=None, role=None, is_pool=True, mark_utilized=True, description='foobar1'),
|
Prefix(prefix='10.0.0.0/24', tenant=None, scope=None, vrf=None, vlan=None, role=None, is_pool=True, mark_utilized=True, description='foobar1'),
|
||||||
Prefix(prefix='10.0.1.0/24', tenant=tenants[0], site=sites[0], vrf=vrfs[0], vlan=vlans[0], role=roles[0], description='foobar2'),
|
Prefix(prefix='10.0.1.0/24', tenant=tenants[0], scope=sites[0], vrf=vrfs[0], vlan=vlans[0], role=roles[0], description='foobar2'),
|
||||||
Prefix(prefix='10.0.2.0/24', tenant=tenants[1], site=sites[1], vrf=vrfs[1], vlan=vlans[1], role=roles[1], status=PrefixStatusChoices.STATUS_DEPRECATED),
|
Prefix(prefix='10.0.2.0/24', tenant=tenants[1], scope=sites[1], vrf=vrfs[1], vlan=vlans[1], role=roles[1], status=PrefixStatusChoices.STATUS_DEPRECATED),
|
||||||
Prefix(prefix='10.0.3.0/24', tenant=tenants[2], site=sites[2], vrf=vrfs[2], vlan=vlans[2], role=roles[2], status=PrefixStatusChoices.STATUS_RESERVED),
|
Prefix(prefix='10.0.3.0/24', tenant=tenants[2], scope=sites[2], vrf=vrfs[2], vlan=vlans[2], role=roles[2], status=PrefixStatusChoices.STATUS_RESERVED),
|
||||||
Prefix(prefix='2001:db8::/64', tenant=None, site=None, vrf=None, vlan=None, role=None, is_pool=True, mark_utilized=True),
|
Prefix(prefix='2001:db8::/64', tenant=None, scope=None, vrf=None, vlan=None, role=None, is_pool=True, mark_utilized=True),
|
||||||
Prefix(prefix='2001:db8:0:1::/64', tenant=tenants[0], site=sites[0], vrf=vrfs[0], vlan=vlans[0], role=roles[0]),
|
Prefix(prefix='2001:db8:0:1::/64', tenant=tenants[0], scope=sites[0], vrf=vrfs[0], vlan=vlans[0], role=roles[0]),
|
||||||
Prefix(prefix='2001:db8:0:2::/64', tenant=tenants[1], site=sites[1], vrf=vrfs[1], vlan=vlans[1], role=roles[1], status=PrefixStatusChoices.STATUS_DEPRECATED),
|
Prefix(prefix='2001:db8:0:2::/64', tenant=tenants[1], scope=sites[1], vrf=vrfs[1], vlan=vlans[1], role=roles[1], status=PrefixStatusChoices.STATUS_DEPRECATED),
|
||||||
Prefix(prefix='2001:db8:0:3::/64', tenant=tenants[2], site=sites[2], vrf=vrfs[2], vlan=vlans[2], role=roles[2], status=PrefixStatusChoices.STATUS_RESERVED),
|
Prefix(prefix='2001:db8:0:3::/64', tenant=tenants[2], scope=sites[2], vrf=vrfs[2], vlan=vlans[2], role=roles[2], status=PrefixStatusChoices.STATUS_RESERVED),
|
||||||
Prefix(prefix='10.0.0.0/16'),
|
Prefix(prefix='10.0.0.0/16'),
|
||||||
Prefix(prefix='2001:db8::/32'),
|
Prefix(prefix='2001:db8::/32'),
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user