Просмотр исходного кода

Move Filter and Form to new file, update all files

dansheps 6 лет назад
Родитель
Сommit
6e8e6809f3

+ 1 - 1
netbox/circuits/filters.py

@@ -3,7 +3,7 @@ from django.db.models import Q
 
 from dcim.models import Site
 from extras.filters import CustomFieldFilterSet
-from tenancy.filters import TenancyFilterSet
+from tenancy.filterset import TenancyFilterSet
 from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter
 from .constants import CIRCUIT_STATUS_CHOICES
 from .models import Provider, Circuit, CircuitTermination, CircuitType

+ 2 - 1
netbox/circuits/forms.py

@@ -3,7 +3,8 @@ from taggit.forms import TagField
 
 from dcim.models import Site
 from extras.forms import AddRemoveTagsForm, CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm
-from tenancy.forms import TenancyForm, TenancyFilterForm
+from tenancy.forms import TenancyForm
+from tenancy.formset import TenancyFilterForm
 from tenancy.models import Tenant
 from utilities.forms import (
     APISelect, APISelectMultiple, add_blank_choice, BootstrapMixin, CommentField, CSVChoiceField,

+ 1 - 1
netbox/dcim/filters.py

@@ -5,7 +5,7 @@ from netaddr import EUI
 from netaddr.core import AddrFormatError
 
 from extras.filters import CustomFieldFilterSet
-from tenancy.filters import TenancyFilterSet
+from tenancy.filterset import TenancyFilterSet
 from utilities.constants import COLOR_CHOICES
 from utilities.filters import (
     NameSlugSearchFilterSet, NullableCharFieldFilter, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter

+ 2 - 1
netbox/dcim/forms.py

@@ -12,7 +12,8 @@ from timezone_field import TimeZoneFormField
 
 from extras.forms import AddRemoveTagsForm, CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm
 from ipam.models import IPAddress, VLAN, VLANGroup
-from tenancy.forms import TenancyForm, TenancyFilterForm
+from tenancy.forms import TenancyForm
+from tenancy.formset import TenancyFilterForm
 from tenancy.models import Tenant
 from utilities.forms import (
     APISelect, APISelectMultiple, add_blank_choice, ArrayFieldSelectMultiple, BootstrapMixin, BulkEditForm,

+ 2 - 24
netbox/extras/filters.py

@@ -4,7 +4,7 @@ from django.db.models import Q
 from taggit.models import Tag
 
 from dcim.models import DeviceRole, Platform, Region, Site
-from tenancy.models import Tenant, TenantGroup
+from tenancy.filterset import TenancyFilterSet
 from .constants import CF_FILTER_DISABLED, CF_FILTER_EXACT, CF_TYPE_BOOLEAN, CF_TYPE_SELECT
 from .models import ConfigContext, CustomField, Graph, ExportTemplate, ObjectChange, TopologyMap
 
@@ -122,7 +122,7 @@ class TopologyMapFilter(django_filters.FilterSet):
         fields = ['name', 'slug']
 
 
-class ConfigContextFilter(django_filters.FilterSet):
+class ConfigContextFilter(TenancyFilterSet, django_filters.FilterSet):
     q = django_filters.CharFilter(
         method='search',
         label='Search',
@@ -171,28 +171,6 @@ class ConfigContextFilter(django_filters.FilterSet):
         to_field_name='slug',
         label='Platform (slug)',
     )
-    tenant_group_id = django_filters.ModelMultipleChoiceFilter(
-        field_name='tenant_groups',
-        queryset=TenantGroup.objects.all(),
-        label='Tenant group',
-    )
-    tenant_group = django_filters.ModelMultipleChoiceFilter(
-        field_name='tenant_groups__slug',
-        queryset=TenantGroup.objects.all(),
-        to_field_name='slug',
-        label='Tenant group (slug)',
-    )
-    tenant_id = django_filters.ModelMultipleChoiceFilter(
-        field_name='tenants',
-        queryset=Tenant.objects.all(),
-        label='Tenant',
-    )
-    tenant = django_filters.ModelMultipleChoiceFilter(
-        field_name='tenants__slug',
-        queryset=Tenant.objects.all(),
-        to_field_name='slug',
-        label='Tenant (slug)',
-    )
 
     class Meta:
         model = ConfigContext

+ 6 - 18
netbox/extras/forms.py

@@ -8,7 +8,7 @@ from taggit.forms import TagField
 from taggit.models import Tag
 
 from dcim.models import DeviceRole, Platform, Region, Site
-from tenancy.models import Tenant, TenantGroup
+from tenancy.formset import TenancyFilterForm
 from utilities.forms import (
     add_blank_choice, APISelectMultiple, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ContentTypeSelect,
     FilterChoiceField, LaxURLField, JSONField, SlugField,
@@ -274,7 +274,7 @@ class ConfigContextBulkEditForm(BootstrapMixin, BulkEditForm):
         ]
 
 
-class ConfigContextFilterForm(BootstrapMixin, forms.Form):
+class ConfigContextFilterForm(TenancyFilterForm, BootstrapMixin, forms.Form):
     q = forms.CharField(
         required=False,
         label='Search'
@@ -311,22 +311,10 @@ class ConfigContextFilterForm(BootstrapMixin, forms.Form):
             value_field="slug",
         )
     )
-    tenant_group = FilterChoiceField(
-        queryset=TenantGroup.objects.all(),
-        to_field_name='slug',
-        widget=APISelectMultiple(
-            api_url="/api/tenancy/tenant-groups/",
-            value_field="slug",
-        )
-    )
-    tenant = FilterChoiceField(
-        queryset=Tenant.objects.all(),
-        to_field_name='slug',
-        widget=APISelectMultiple(
-            api_url="/api/tenancy/tenants/",
-            value_field="slug",
-        )
-    )
+
+    class Meta:
+        # Order the form fields, fields not listed are appended
+        field_order = ['q', 'type', 'provider', 'status']
 
 
 #

+ 1 - 1
netbox/ipam/filters.py

@@ -6,7 +6,7 @@ from netaddr.core import AddrFormatError
 
 from dcim.models import Site, Device, Interface
 from extras.filters import CustomFieldFilterSet
-from tenancy.filters import TenancyFilterSet
+from tenancy.filterset import TenancyFilterSet
 from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter
 from virtualization.models import VirtualMachine
 from .constants import IPADDRESS_ROLE_CHOICES, IPADDRESS_STATUS_CHOICES, PREFIX_STATUS_CHOICES, VLAN_STATUS_CHOICES

+ 2 - 1
netbox/ipam/forms.py

@@ -5,7 +5,8 @@ from taggit.forms import TagField
 
 from dcim.models import Site, Rack, Device, Interface
 from extras.forms import AddRemoveTagsForm, CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm
-from tenancy.forms import TenancyForm, TenancyFilterForm
+from tenancy.forms import TenancyForm
+from tenancy.formset import TenancyFilterForm
 from tenancy.models import Tenant
 from utilities.forms import (
     add_blank_choice, APISelect, APISelectMultiple, BootstrapMixin, BulkEditNullBooleanSelect, ChainedModelChoiceField,

+ 0 - 25
netbox/tenancy/filters.py

@@ -47,28 +47,3 @@ class TenantFilter(CustomFieldFilterSet, django_filters.FilterSet):
             Q(description__icontains=value) |
             Q(comments__icontains=value)
         )
-
-
-class TenancyFilterSet(django_filters.FilterSet):
-    tenant_group_id = django_filters.ModelMultipleChoiceFilter(
-        field_name='tenant__group__id',
-        queryset=TenantGroup.objects.all(),
-        to_field_name='id',
-        label='Tenant Group (ID)',
-    )
-    tenant_group = django_filters.ModelMultipleChoiceFilter(
-        field_name='tenant__group__slug',
-        queryset=TenantGroup.objects.all(),
-        to_field_name='slug',
-        label='Tenant Group (slug)',
-    )
-    tenant_id = django_filters.ModelMultipleChoiceFilter(
-        queryset=Tenant.objects.all(),
-        label='Tenant (ID)',
-    )
-    tenant = django_filters.ModelMultipleChoiceFilter(
-        field_name='tenant__slug',
-        queryset=Tenant.objects.all(),
-        to_field_name='slug',
-        label='Tenant (slug)',
-    )

+ 27 - 0
netbox/tenancy/filterset.py

@@ -0,0 +1,27 @@
+import django_filters
+from .models import Tenant, TenantGroup
+
+
+class TenancyFilterSet(django_filters.FilterSet):
+    tenant_group_id = django_filters.ModelMultipleChoiceFilter(
+        field_name='tenant__group__id',
+        queryset=TenantGroup.objects.all(),
+        to_field_name='id',
+        label='Tenant Group (ID)',
+    )
+    tenant_group = django_filters.ModelMultipleChoiceFilter(
+        field_name='tenant__group__slug',
+        queryset=TenantGroup.objects.all(),
+        to_field_name='slug',
+        label='Tenant Group (slug)',
+    )
+    tenant_id = django_filters.ModelMultipleChoiceFilter(
+        queryset=Tenant.objects.all(),
+        label='Tenant (ID)',
+    )
+    tenant = django_filters.ModelMultipleChoiceFilter(
+        field_name='tenant__slug',
+        queryset=Tenant.objects.all(),
+        to_field_name='slug',
+        label='Tenant (slug)',
+    )

+ 1 - 31
netbox/tenancy/forms.py

@@ -1,5 +1,4 @@
 from django import forms
-from django.db.models import Count
 from taggit.forms import TagField
 
 from extras.forms import AddRemoveTagsForm, CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm
@@ -115,39 +114,10 @@ class TenantFilterForm(BootstrapMixin, CustomFieldFilterForm):
         )
     )
 
-#
-# Tenancy filtering form extension
-#
-class TenancyFilterForm(forms.Form):
-    tenant_group = FilterChoiceField(
-        queryset=TenantGroup.objects.all(),
-        to_field_name='slug',
-        null_label='-- None --',
-        widget=APISelectMultiple(
-            api_url="/api/tenancy/tenant-groups/",
-            value_field="slug",
-            null_option=True,
-            filter_for={
-                'tenant': 'group'
-            }
-        )
-    )
-    tenant = FilterChoiceField(
-        queryset=Tenant.objects.all(),
-        to_field_name='slug',
-        null_label='-- None --',
-        widget=APISelectMultiple(
-            api_url="/api/tenancy/tenants/",
-            value_field="slug",
-            null_option=True,
-        )
-    )
-
 
 #
 # Tenancy form extension
 #
-
 class TenancyForm(ChainedFieldsMixin, forms.Form):
     tenant_group = forms.ModelChoiceField(
         queryset=TenantGroup.objects.all(),
@@ -182,4 +152,4 @@ class TenancyForm(ChainedFieldsMixin, forms.Form):
             initial['tenant_group'] = instance.tenant.group
             kwargs['initial'] = initial
 
-        super().__init__(*args, **kwargs)
+        super().__init__(*args, **kwargs)

+ 31 - 0
netbox/tenancy/formset.py

@@ -0,0 +1,31 @@
+from django import forms
+from utilities.forms import APISelectMultiple, FilterChoiceField
+from .models import Tenant, TenantGroup
+
+#
+# Tenancy filtering form extension
+#
+class TenancyFilterForm(forms.Form):
+    tenant_group = FilterChoiceField(
+        queryset=TenantGroup.objects.all(),
+        to_field_name='slug',
+        null_label='-- None --',
+        widget=APISelectMultiple(
+            api_url="/api/tenancy/tenant-groups/",
+            value_field="slug",
+            null_option=True,
+            filter_for={
+                'tenant': 'group'
+            }
+        )
+    )
+    tenant = FilterChoiceField(
+        queryset=Tenant.objects.all(),
+        to_field_name='slug',
+        null_label='-- None --',
+        widget=APISelectMultiple(
+            api_url="/api/tenancy/tenants/",
+            value_field="slug",
+            null_option=True,
+        )
+    )

+ 1 - 1
netbox/virtualization/filters.py

@@ -6,7 +6,7 @@ from netaddr.core import AddrFormatError
 
 from dcim.models import DeviceRole, Interface, Platform, Region, Site
 from extras.filters import CustomFieldFilterSet
-from tenancy.filters import TenancyFilterSet
+from tenancy.filterset import TenancyFilterSet
 from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter
 from .constants import VM_STATUS_CHOICES
 from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine

+ 2 - 1
netbox/virtualization/forms.py

@@ -7,7 +7,8 @@ from dcim.forms import INTERFACE_MODE_HELP_TEXT
 from dcim.models import Device, DeviceRole, Interface, Platform, Rack, Region, Site
 from extras.forms import AddRemoveTagsForm, CustomFieldBulkEditForm, CustomFieldForm, CustomFieldFilterForm
 from ipam.models import IPAddress
-from tenancy.forms import TenancyForm, TenancyFilterForm
+from tenancy.forms import TenancyForm
+from tenancy.formset import TenancyFilterForm
 from tenancy.models import Tenant, TenantGroup
 from utilities.forms import (
     add_blank_choice, APISelect, APISelectMultiple, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect,