Closes #381: Filter by site group (#382)

* add Site Group filter

* revise query_params
This commit is contained in:
Mario
2023-09-21 16:15:45 +02:00
committed by GitHub
parent 78b8a5ae97
commit 86c0c55896
2 changed files with 24 additions and 5 deletions
+7 -1
View File
@@ -1,6 +1,6 @@
import django_filters import django_filters
from dcim.choices import DeviceStatusChoices from dcim.choices import DeviceStatusChoices
from dcim.models import Device, DeviceRole, Location, Rack, Region, Site from dcim.models import Device, DeviceRole, Location, Rack, Region, Site, SiteGroup
from django.db.models import Q from django.db.models import Q
from netbox.filtersets import NetBoxModelFilterSet from netbox.filtersets import NetBoxModelFilterSet
from tenancy.filtersets import TenancyFilterSet from tenancy.filtersets import TenancyFilterSet
@@ -27,6 +27,12 @@ class DeviceFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
queryset=Site.objects.all(), queryset=Site.objects.all(),
label="Site (ID)", label="Site (ID)",
) )
sitegroup_id = TreeNodeMultipleChoiceFilter(
queryset=SiteGroup.objects.all(),
field_name="site__group",
lookup_expr="in",
label="Site Group (ID)",
)
location_id = TreeNodeMultipleChoiceFilter( location_id = TreeNodeMultipleChoiceFilter(
queryset=Location.objects.all(), queryset=Location.objects.all(),
field_name="location", field_name="location",
+17 -4
View File
@@ -5,7 +5,7 @@ from django.conf import settings
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from dcim.models import Device, Site, Region, DeviceRole, Location, Rack from dcim.models import Device, Site, SiteGroup, Region, DeviceRole, Location, Rack
from django import forms from django import forms
from dcim.choices import DeviceStatusChoices from dcim.choices import DeviceStatusChoices
@@ -52,7 +52,7 @@ class DeviceFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
"tenant_id", "tenant_id",
), ),
), ),
(None, ("region_id", "site_id", "location_id", "rack_id")), (None, ("region_id", "sitegroup_id", "site_id", "location_id", "rack_id")),
( (
None, None,
( (
@@ -69,10 +69,14 @@ class DeviceFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
label=_("Coordinate group"), label=_("Coordinate group"),
) )
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), required=False, label=_("Region") queryset=Region.objects.all(),
required=False,
label=_("Region")
) )
role_id = DynamicModelMultipleChoiceField( role_id = DynamicModelMultipleChoiceField(
queryset=DeviceRole.objects.all(), required=False, label=_("Device Role") queryset=DeviceRole.objects.all(),
required=False,
label=_("Device Role")
) )
id = DynamicModelMultipleChoiceField( id = DynamicModelMultipleChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
@@ -81,6 +85,7 @@ class DeviceFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
query_params={ query_params={
"location_id": "$location_id", "location_id": "$location_id",
"region_id": "$region_id", "region_id": "$region_id",
"site_group_id": "$sitegroup_id",
"site_id": "$site_id", "site_id": "$site_id",
"role_id": "$role_id", "role_id": "$role_id",
}, },
@@ -90,14 +95,21 @@ class DeviceFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
required=False, required=False,
query_params={ query_params={
"region_id": "$region_id", "region_id": "$region_id",
"group_id": "$sitegroup_id",
}, },
label=_("Site"), label=_("Site"),
) )
sitegroup_id = DynamicModelMultipleChoiceField(
queryset=SiteGroup.objects.all(),
required=False,
label=_("Site Group"),
)
location_id = DynamicModelMultipleChoiceField( location_id = DynamicModelMultipleChoiceField(
queryset=Location.objects.all(), queryset=Location.objects.all(),
required=False, required=False,
query_params={ query_params={
"region_id": "$region_id", "region_id": "$region_id",
"site_group_id": "$sitegroup_id",
"site_id": "$site_id", "site_id": "$site_id",
}, },
label=_("Location"), label=_("Location"),
@@ -107,6 +119,7 @@ class DeviceFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
required=False, required=False,
query_params={ query_params={
"region_id": "$region_id", "region_id": "$region_id",
"site_group_id": "$sitegroup_id",
"site_id": "$site_id", "site_id": "$site_id",
"location_id": "$location_id", "location_id": "$location_id",
}, },