diff --git a/netbox/circuits/forms.py b/netbox/circuits/forms.py index a1777bb16e..4b9e949f8a 100644 --- a/netbox/circuits/forms.py +++ b/netbox/circuits/forms.py @@ -62,6 +62,7 @@ class ProviderBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): class ProviderFilterForm(BootstrapMixin, CustomFieldFilterForm): model = Provider + q = forms.CharField(required=False, label='Search') site = FilterChoiceField(queryset=Site.objects.all(), to_field_name='slug') @@ -126,6 +127,7 @@ class CircuitBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): class CircuitFilterForm(BootstrapMixin, CustomFieldFilterForm): model = Circuit + q = forms.CharField(required=False, label='Search') type = FilterChoiceField(queryset=CircuitType.objects.annotate(filter_count=Count('circuits')), to_field_name='slug') provider = FilterChoiceField(queryset=Provider.objects.annotate(filter_count=Count('circuits')), diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 95fb838925..9f6c7bde66 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -101,6 +101,7 @@ class SiteBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): class SiteFilterForm(BootstrapMixin, CustomFieldFilterForm): model = Site + q = forms.CharField(required=False, label='Search') tenant = FilterChoiceField(queryset=Tenant.objects.annotate(filter_count=Count('sites')), to_field_name='slug', null_option=(0, 'None')) @@ -232,6 +233,7 @@ class RackBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): class RackFilterForm(BootstrapMixin, CustomFieldFilterForm): model = Rack + q = forms.CharField(required=False, label='Search') site = FilterChoiceField(queryset=Site.objects.annotate(filter_count=Count('racks')), to_field_name='slug') group_id = FilterChoiceField(queryset=RackGroup.objects.select_related('site') .annotate(filter_count=Count('racks')), label='Rack group', null_option=(0, 'None')) @@ -281,6 +283,7 @@ class DeviceTypeBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): class DeviceTypeFilterForm(BootstrapMixin, CustomFieldFilterForm): model = DeviceType + q = forms.CharField(required=False, label='Search') manufacturer = FilterChoiceField(queryset=Manufacturer.objects.annotate(filter_count=Count('device_types')), to_field_name='slug') @@ -639,6 +642,7 @@ class DeviceBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): class DeviceFilterForm(BootstrapMixin, CustomFieldFilterForm): model = Device + q = forms.CharField(required=False, label='Search') site = FilterChoiceField( queryset=Site.objects.annotate(filter_count=Count('racks__devices')), to_field_name='slug', diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index 2f6f0af845..4b9d8ddf51 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -63,6 +63,7 @@ class VRFBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): class VRFFilterForm(BootstrapMixin, CustomFieldFilterForm): model = VRF + q = forms.CharField(required=False, label='Search') tenant = FilterChoiceField(queryset=Tenant.objects.annotate(filter_count=Count('vrfs')), to_field_name='slug', null_option=(0, None)) @@ -128,6 +129,7 @@ class AggregateBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): class AggregateFilterForm(BootstrapMixin, CustomFieldFilterForm): model = Aggregate + q = forms.CharField(required=False, label='Search') family = forms.ChoiceField(required=False, choices=IP_FAMILY_CHOICES, label='Address Family') rir = FilterChoiceField(queryset=RIR.objects.annotate(filter_count=Count('aggregates')), to_field_name='slug', label='RIR') @@ -256,8 +258,9 @@ def prefix_status_choices(): class PrefixFilterForm(BootstrapMixin, CustomFieldFilterForm): model = Prefix - parent = forms.CharField(required=False, label='Search Within', widget=forms.TextInput(attrs={ - 'placeholder': 'Network', + q = forms.CharField(required=False, label='Search') + parent = forms.CharField(required=False, label='Parent Prefix', widget=forms.TextInput(attrs={ + 'placeholder': 'Prefix', })) family = forms.ChoiceField(required=False, choices=IP_FAMILY_CHOICES, label='Address Family') vrf = FilterChoiceField(queryset=VRF.objects.annotate(filter_count=Count('prefixes')), to_field_name='rd', @@ -446,7 +449,8 @@ def ipaddress_status_choices(): class IPAddressFilterForm(BootstrapMixin, CustomFieldFilterForm): model = IPAddress - parent = forms.CharField(required=False, label='Search Within', widget=forms.TextInput(attrs={ + q = forms.CharField(required=False, label='Search') + parent = forms.CharField(required=False, label='Parent Prefix', widget=forms.TextInput(attrs={ 'placeholder': 'Prefix', })) family = forms.ChoiceField(required=False, choices=IP_FAMILY_CHOICES, label='Address Family') @@ -560,6 +564,7 @@ def vlan_status_choices(): class VLANFilterForm(BootstrapMixin, CustomFieldFilterForm): model = VLAN + q = forms.CharField(required=False, label='Search') site = FilterChoiceField(queryset=Site.objects.annotate(filter_count=Count('vlans')), to_field_name='slug') group_id = FilterChoiceField(queryset=VLANGroup.objects.annotate(filter_count=Count('vlans')), label='VLAN group', null_option=(0, 'None')) diff --git a/netbox/secrets/forms.py b/netbox/secrets/forms.py index 8012e2c55a..b4c64b485a 100644 --- a/netbox/secrets/forms.py +++ b/netbox/secrets/forms.py @@ -100,6 +100,7 @@ class SecretBulkEditForm(BootstrapMixin, BulkEditForm): class SecretFilterForm(BootstrapMixin, forms.Form): + q = forms.CharField(required=False, label='Search') role = FilterChoiceField(queryset=SecretRole.objects.annotate(filter_count=Count('secrets')), to_field_name='slug') diff --git a/netbox/templates/circuits/circuit_list.html b/netbox/templates/circuits/circuit_list.html index db6861b2e8..63ee92f2d7 100644 --- a/netbox/templates/circuits/circuit_list.html +++ b/netbox/templates/circuits/circuit_list.html @@ -24,7 +24,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/templates/circuits/provider_list.html b/netbox/templates/circuits/provider_list.html index ca3dbfc09b..36438d66b0 100644 --- a/netbox/templates/circuits/provider_list.html +++ b/netbox/templates/circuits/provider_list.html @@ -23,7 +23,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/templates/dcim/console_connections_list.html b/netbox/templates/dcim/console_connections_list.html index eb95310698..68b57dc272 100644 --- a/netbox/templates/dcim/console_connections_list.html +++ b/netbox/templates/dcim/console_connections_list.html @@ -19,7 +19,7 @@ {% render_table table 'table.html' %}
- {% include 'inc/filter_panel.html' %} + {% include 'inc/search_panel.html' %}
{% endblock %} diff --git a/netbox/templates/dcim/device_list.html b/netbox/templates/dcim/device_list.html index b543154ec0..7b0984a698 100644 --- a/netbox/templates/dcim/device_list.html +++ b/netbox/templates/dcim/device_list.html @@ -24,7 +24,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/templates/dcim/devicetype_list.html b/netbox/templates/dcim/devicetype_list.html index b8ce0e719a..5ab97a4816 100644 --- a/netbox/templates/dcim/devicetype_list.html +++ b/netbox/templates/dcim/devicetype_list.html @@ -19,7 +19,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/templates/dcim/interface_connections_list.html b/netbox/templates/dcim/interface_connections_list.html index 56011af1d1..23c7b8a9a9 100644 --- a/netbox/templates/dcim/interface_connections_list.html +++ b/netbox/templates/dcim/interface_connections_list.html @@ -19,7 +19,7 @@ {% render_table table 'table.html' %}
- {% include 'inc/filter_panel.html' %} + {% include 'inc/search_panel.html' %}
{% endblock %} diff --git a/netbox/templates/dcim/power_connections_list.html b/netbox/templates/dcim/power_connections_list.html index 55c9e2ce51..1b6528d861 100644 --- a/netbox/templates/dcim/power_connections_list.html +++ b/netbox/templates/dcim/power_connections_list.html @@ -19,7 +19,7 @@ {% render_table table 'table.html' %}
- {% include 'inc/filter_panel.html' %} + {% include 'inc/search_panel.html' %}
{% endblock %} diff --git a/netbox/templates/dcim/rack_list.html b/netbox/templates/dcim/rack_list.html index 10ee4ff045..fa5371f6ff 100644 --- a/netbox/templates/dcim/rack_list.html +++ b/netbox/templates/dcim/rack_list.html @@ -24,7 +24,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/templates/dcim/rackgroup_list.html b/netbox/templates/dcim/rackgroup_list.html index 7b9b0677df..dee6472fba 100644 --- a/netbox/templates/dcim/rackgroup_list.html +++ b/netbox/templates/dcim/rackgroup_list.html @@ -18,7 +18,7 @@ {% include 'utilities/obj_table.html' with bulk_delete_url='dcim:rackgroup_bulk_delete' %}
- {% include 'inc/filter_panel.html' %} + {% include 'inc/search_panel.html' %}
{% endblock %} diff --git a/netbox/templates/dcim/site_list.html b/netbox/templates/dcim/site_list.html index 45169afe68..895f908045 100644 --- a/netbox/templates/dcim/site_list.html +++ b/netbox/templates/dcim/site_list.html @@ -23,7 +23,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/templates/inc/filter_panel.html b/netbox/templates/inc/filter_panel.html deleted file mode 100644 index cde76a21c9..0000000000 --- a/netbox/templates/inc/filter_panel.html +++ /dev/null @@ -1,32 +0,0 @@ -{% load form_helpers %} - -{% if filter_form %} -
-
- - Filter -
-
-
- {% for field in filter_form %} -
- {% if field|widget_type == 'checkboxinput' %} - - {% else %} - {{ field.label_tag }} - {{ field }} - {% endif %} -
- {% endfor %} -
- - - Clear - -
-
-
-
-{% endif %} diff --git a/netbox/templates/inc/search_panel.html b/netbox/templates/inc/search_panel.html index 692ef3fd2c..c49b60ac49 100644 --- a/netbox/templates/inc/search_panel.html +++ b/netbox/templates/inc/search_panel.html @@ -1,18 +1,39 @@ +{% load form_helpers %} +
Search
-
-
- - + + {% for field in filter_form %} +
+ {% if field.name == "q" %} +
+ + + + +
+ {% elif field|widget_type == 'checkboxinput' %} + + {% else %} + {{ field.label_tag }} + {{ field }} + {% endif %} +
+ {% endfor %} +
- -
+ + Clear + +
diff --git a/netbox/templates/ipam/aggregate_list.html b/netbox/templates/ipam/aggregate_list.html index aef7d84c19..f432748764 100644 --- a/netbox/templates/ipam/aggregate_list.html +++ b/netbox/templates/ipam/aggregate_list.html @@ -27,7 +27,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/templates/ipam/ipaddress_list.html b/netbox/templates/ipam/ipaddress_list.html index 52391a2b47..bb442c8245 100644 --- a/netbox/templates/ipam/ipaddress_list.html +++ b/netbox/templates/ipam/ipaddress_list.html @@ -25,7 +25,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/templates/ipam/prefix_list.html b/netbox/templates/ipam/prefix_list.html index df790f9c6e..10631ae277 100644 --- a/netbox/templates/ipam/prefix_list.html +++ b/netbox/templates/ipam/prefix_list.html @@ -34,7 +34,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/templates/ipam/rir_list.html b/netbox/templates/ipam/rir_list.html index 4d71431a26..33bef6d99f 100644 --- a/netbox/templates/ipam/rir_list.html +++ b/netbox/templates/ipam/rir_list.html @@ -33,7 +33,7 @@ {% endif %}
- {% include 'inc/filter_panel.html' %} + {% include 'inc/search_panel.html' %}
{% endblock %} diff --git a/netbox/templates/ipam/vlan_list.html b/netbox/templates/ipam/vlan_list.html index 78ad140ff4..2db914721a 100644 --- a/netbox/templates/ipam/vlan_list.html +++ b/netbox/templates/ipam/vlan_list.html @@ -25,7 +25,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/templates/ipam/vlangroup_list.html b/netbox/templates/ipam/vlangroup_list.html index 1c8f923875..b6e1d45790 100644 --- a/netbox/templates/ipam/vlangroup_list.html +++ b/netbox/templates/ipam/vlangroup_list.html @@ -18,7 +18,7 @@ {% include 'utilities/obj_table.html' with bulk_delete_url='ipam:vlangroup_bulk_delete' %}
- {% include 'inc/filter_panel.html' %} + {% include 'inc/search_panel.html' %}
{% endblock %} diff --git a/netbox/templates/ipam/vrf_list.html b/netbox/templates/ipam/vrf_list.html index e5506bfaa3..12f0b6bc30 100644 --- a/netbox/templates/ipam/vrf_list.html +++ b/netbox/templates/ipam/vrf_list.html @@ -25,7 +25,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/templates/secrets/secret_list.html b/netbox/templates/secrets/secret_list.html index 70bdcf1f1f..29657d3f3c 100644 --- a/netbox/templates/secrets/secret_list.html +++ b/netbox/templates/secrets/secret_list.html @@ -19,7 +19,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/templates/tenancy/tenant_list.html b/netbox/templates/tenancy/tenant_list.html index 529f01c764..81173b3685 100644 --- a/netbox/templates/tenancy/tenant_list.html +++ b/netbox/templates/tenancy/tenant_list.html @@ -24,7 +24,6 @@
{% include 'inc/search_panel.html' %} - {% include 'inc/filter_panel.html' %}
{% endblock %} diff --git a/netbox/tenancy/forms.py b/netbox/tenancy/forms.py index bd98f2031e..0e29a84956 100644 --- a/netbox/tenancy/forms.py +++ b/netbox/tenancy/forms.py @@ -55,5 +55,6 @@ class TenantBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): class TenantFilterForm(BootstrapMixin, CustomFieldFilterForm): model = Tenant + q = forms.CharField(required=False, label='Search') group = FilterChoiceField(queryset=TenantGroup.objects.annotate(filter_count=Count('tenants')), to_field_name='slug', null_option=(0, 'None'))