Filter sets define the mechanisms available for filtering or searching through a set of objects in NetBox. For instance, sites can be filtered by their parent region or group, status, facility ID, and so on. The same filter set is used consistently for a model whether the request is made via the UI, REST API, or GraphQL API. NetBox employs the django-filters2 library to define filter sets.
To support additional functionality standard to NetBox models, such as tag assignment and custom field support, the NetBoxModelFilterSet class is available for use by plugins. This should be used as the base filter set class for plugin models which inherit from NetBoxModel. Within this class, individual filters can be declared as directed by the django-filters documentation. An example is provided below.
# filtersets.py
import django_filters
from netbox.filtersets import NetBoxModelFilterSet
from .models import MyModel
class MyFilterSet(NetBoxModelFilterSet):
status = django_filters.MultipleChoiceFilter(
choices=(
('foo', 'Foo'),
('bar', 'Bar'),
('baz', 'Baz'),
),
null_value=None
)
class Meta:
model = MyModel
fields = ('some', 'other', 'fields')
To utilize a filter set in the subclass of a generic view, such as ObjectListView or BulkEditView, set it as the filterset attribute on the view class:
# views.py
from netbox.views.generic import ObjectListView
from .filtersets import MyModelFitlerSet
from .models import MyModel
class MyModelListView(ObjectListView):
queryset = MyModel.objects.all()
filterset = MyModelFitlerSet
To enable a filter on a REST API endpoint, set it as the filterset_class attribute on the API view:
# api/views.py
from myplugin import models, filtersets
from . import serializers
class MyModelViewSet(...):
queryset = models.MyModel.objects.all()
serializer_class = serializers.MyModelSerializer
filterset_class = filtersets.MyModelFilterSet