Pular para conteúdo

Filtros e Grupos de Filtro (Filter Sets)

Grupos de filtros definem os mecanismos disponíveis para filtrar ou pesquisar um grupo de objetos no NetBox. Por exemplo, sites (locais) podem ser filtradas pela região ou grupo pai (parent), status, ID da instalação (facility) e por aí vai. O mesmo grupo de filtro deve ser usado de forma consistente para um modelo seja em uma requisição feita pela interface web, API REST, ou uma API GraphQL. NetBox utiliza a biblioteca django-filters2 para definir os grupos de filtros.

Classes de FilterSets (Grupos de Filtro)

Para suportar funcionalidades adicionais às padrões dos modelos do NetBox, como a associação de tag e suporte a campos customizadas, a classe NetBoxModelFilterSe está disponível para uso dos plugins. Isso deve ser usado pela classe base de grupos de filtros para os modelos (models) do plugin que herdam NetBoxModel. Dentro dessa clase, filtros individuais podem ser declaradas diretamente conforme documentação do django-filters. Um exemplo abaixo é fornecido.

# 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')

Declarando Grupos de Filtro (Filter Sets)

Para utilizar grupos de filtro em uma subclasse de uma visualização genérica do NetBox (como ObjectListView ou BulkEditView), defina o atributo filterset na classe de visualização (view class):

# views.py
from netbox.views.generic import ObjectListView
from .filtersets import MyModelFilterSet
from .models import MyModel

class MyModelListView(ObjectListView):
    queryset = MyModel.objects.all()
    filterset = MyModelFilterSet

Para habilitar um grupo de filtro no endpoint da API REST, configure o atributo filterset_class na visualização (view) da API:

# 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

Classes de Filtro

TagFilter

A classe TagFilter está disponível para todosos modelos que suportam associação de tag (os que herdam de NetBoxModel ou TagsMixin). Esse filtro cria uma subclasse do ModelMultipleChoiceFilter para trabalhar com a classe TaggedItem.

from django_filters import FilterSet
from extras.filters import TagFilter

class MyModelFilterSet(FilterSet):
    tag = TagFilter()