From 7b3882dba072d42c89ace14905fadc46ad433b16 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 3 Jan 2020 13:36:23 -0500 Subject: [PATCH] Add region filters, fields for virtualization models --- netbox/virtualization/filters.py | 31 +++++++++++++++++++---------- netbox/virtualization/forms.py | 34 +++++++++++++++++++++----------- 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/netbox/virtualization/filters.py b/netbox/virtualization/filters.py index 4f4ae03ae..6c75c78fc 100644 --- a/netbox/virtualization/filters.py +++ b/netbox/virtualization/filters.py @@ -36,6 +36,27 @@ class ClusterFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet): method='search', label='Search', ) + region_id = TreeNodeMultipleChoiceFilter( + queryset=Region.objects.all(), + field_name='site__region__in', + label='Region (ID)', + ) + region = TreeNodeMultipleChoiceFilter( + queryset=Region.objects.all(), + field_name='site__region__in', + to_field_name='slug', + label='Region (slug)', + ) + site_id = django_filters.ModelMultipleChoiceFilter( + queryset=Site.objects.all(), + label='Site (ID)', + ) + site = django_filters.ModelMultipleChoiceFilter( + field_name='site__slug', + queryset=Site.objects.all(), + to_field_name='slug', + label='Site (slug)', + ) group_id = django_filters.ModelMultipleChoiceFilter( queryset=ClusterGroup.objects.all(), label='Parent group (ID)', @@ -56,16 +77,6 @@ class ClusterFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet): to_field_name='slug', label='Cluster type (slug)', ) - site_id = django_filters.ModelMultipleChoiceFilter( - queryset=Site.objects.all(), - label='Site (ID)', - ) - site = django_filters.ModelMultipleChoiceFilter( - field_name='site__slug', - queryset=Site.objects.all(), - to_field_name='slug', - label='Site (slug)', - ) tag = TagFilter() class Meta: diff --git a/netbox/virtualization/forms.py b/netbox/virtualization/forms.py index 48b370dc1..427e676f6 100644 --- a/netbox/virtualization/forms.py +++ b/netbox/virtualization/forms.py @@ -173,6 +173,29 @@ class ClusterBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEdit class ClusterFilterForm(BootstrapMixin, CustomFieldFilterForm): model = Cluster q = forms.CharField(required=False, label='Search') + region = FilterChoiceField( + queryset=Region.objects.all(), + to_field_name='slug', + required=False, + widget=APISelectMultiple( + api_url="/api/dcim/regions/", + value_field="slug", + filter_for={ + 'site': 'region' + } + ) + ) + site = FilterChoiceField( + queryset=Site.objects.all(), + to_field_name='slug', + null_label='-- None --', + required=False, + widget=APISelectMultiple( + api_url="/api/dcim/sites/", + value_field='slug', + null_option=True, + ) + ) type = FilterChoiceField( queryset=ClusterType.objects.all(), to_field_name='slug', @@ -193,17 +216,6 @@ class ClusterFilterForm(BootstrapMixin, CustomFieldFilterForm): null_option=True, ) ) - site = FilterChoiceField( - queryset=Site.objects.all(), - to_field_name='slug', - null_label='-- None --', - required=False, - widget=APISelectMultiple( - api_url="/api/dcim/sites/", - value_field='slug', - null_option=True, - ) - ) class ClusterAddDevicesForm(BootstrapMixin, ChainedFieldsMixin, forms.Form):