Implement list filtering forms (#57)

Closes #54

Signed-off-by: wkoot <3715211+wkoot@users.noreply.github.com>
This commit is contained in:
wkoot
2025-02-13 22:16:32 +01:00
committed by GitHub
parent c3ed952b5f
commit 193f04a208
11 changed files with 193 additions and 33 deletions
+63 -4
View File
@@ -1,12 +1,22 @@
from django_filters import CharFilter, ModelMultipleChoiceFilter, MultipleChoiceFilter
from django.db.models import Q
from dcim.models import Device, Manufacturer
from netbox.filtersets import NetBoxModelFilterSet
from netbox_slm.models import SoftwareProduct, SoftwareProductVersion, SoftwareProductInstallation, SoftwareLicense
from netbox_slm.models import SoftwareProduct, SoftwareProductVersion, SoftwareProductInstallation, SoftwareLicense, SoftwareReleaseTypes
from virtualization.models import VirtualMachine, Cluster
class SoftwareProductFilterSet(NetBoxModelFilterSet):
"""Filter capabilities for SoftwareProduct instances."""
name = CharFilter(lookup_expr="icontains")
description = CharFilter(lookup_expr="icontains")
manufacturer = ModelMultipleChoiceFilter(
queryset=Manufacturer.objects.all()
)
class Meta:
model = SoftwareProduct
fields = tuple()
@@ -27,9 +37,24 @@ class SoftwareProductFilterSet(NetBoxModelFilterSet):
class SoftwareProductVersionFilterSet(NetBoxModelFilterSet):
"""Filter capabilities for SoftwareProductVersion instances."""
name = CharFilter(lookup_expr="icontains")
filename = CharFilter(lookup_expr="icontains")
release_type = MultipleChoiceFilter(choices=SoftwareReleaseTypes.choices)
manufacturer = ModelMultipleChoiceFilter(
field_name="software_product__manufacturer",
queryset=Manufacturer.objects.all(),
)
software_product = ModelMultipleChoiceFilter(
queryset=SoftwareProduct.objects.all(),
label="Software Product",
)
class Meta:
model = SoftwareProductVersion
fields = ("software_product",)
fields = tuple()
def search(self, queryset, name, value):
"""Perform the filtered search."""
@@ -47,9 +72,27 @@ class SoftwareProductVersionFilterSet(NetBoxModelFilterSet):
class SoftwareProductInstallationFilterSet(NetBoxModelFilterSet):
"""Filter capabilities for SoftwareProductInstallation instances."""
device = ModelMultipleChoiceFilter(
queryset=Device.objects.all()
)
virtualmachine = ModelMultipleChoiceFilter(
queryset=VirtualMachine.objects.all(),
label="Virtual Machine",
)
cluster = ModelMultipleChoiceFilter(
queryset=Cluster.objects.all()
)
software_product = ModelMultipleChoiceFilter(
queryset=SoftwareProduct.objects.all(),
label="Software Product",
)
version = ModelMultipleChoiceFilter(
queryset=SoftwareProductVersion.objects.all()
)
class Meta:
model = SoftwareProductInstallation
fields = ("software_product",)
fields = tuple()
def search(self, queryset, name, value):
"""Perform the filtered search."""
@@ -67,9 +110,25 @@ class SoftwareProductInstallationFilterSet(NetBoxModelFilterSet):
class SoftwareLicenseFilterSet(NetBoxModelFilterSet):
"""Filter capabilities for SoftwareLicense instances."""
name = CharFilter(lookup_expr="icontains")
description = CharFilter(lookup_expr="icontains")
type = CharFilter(lookup_expr="icontains")
stored_location = CharFilter(lookup_expr="icontains")
software_product = ModelMultipleChoiceFilter(
queryset=SoftwareProduct.objects.all(),
label="Software Product",
)
version = ModelMultipleChoiceFilter(
queryset=SoftwareProductVersion.objects.all()
)
installation = ModelMultipleChoiceFilter(
queryset=SoftwareProductInstallation.objects.all()
)
class Meta:
model = SoftwareLicense
fields = tuple()
fields = ("support",)
def search(self, queryset, name, value):
"""Perform the filtered search."""