diff --git a/netbox_dns_bridge/filtersets.py b/netbox_dns_bridge/filtersets.py new file mode 100644 index 0000000..b611931 --- /dev/null +++ b/netbox_dns_bridge/filtersets.py @@ -0,0 +1,29 @@ +import django_filters +from django.db.models import Q + +import netbox_dns.models +from netbox.filtersets import NetBoxModelFilterSet +from netbox_dns.choices import ZoneStatusChoices + + +class ZoneFilterSet(NetBoxModelFilterSet): + view = django_filters.ModelMultipleChoiceFilter( + field_name="view", + queryset=netbox_dns.models.View.objects.all(), + ) + status = django_filters.MultipleChoiceFilter( + choices=ZoneStatusChoices, + null_value=None, + ) + + class Meta: + model = netbox_dns.models.Zone + fields = ("id", "name", "view", "status", "catz_identifier") + + def search(self, queryset, name, value): + if not value.strip(): + return queryset + return queryset.filter( + Q(name__icontains=value) + | Q(catz_identifier__name__icontains=value) + ) diff --git a/netbox_dns_bridge/forms.py b/netbox_dns_bridge/forms.py new file mode 100644 index 0000000..9987d40 --- /dev/null +++ b/netbox_dns_bridge/forms.py @@ -0,0 +1,21 @@ +from django import forms +from django.utils.translation import gettext_lazy as _ + +import netbox_dns.models +from netbox.forms import NetBoxModelFilterSetForm +from netbox_dns.choices import ZoneStatusChoices +from utilities.forms.fields import DynamicModelMultipleChoiceField + + +class CatalogZoneFilterForm(NetBoxModelFilterSetForm): + model = netbox_dns.models.Zone + + q = forms.CharField(required=False, label=_("Search")) + view = DynamicModelMultipleChoiceField( + queryset=netbox_dns.models.View.objects.all(), + required=False, + ) + status = forms.MultipleChoiceField( + choices=ZoneStatusChoices, + required=False, + ) diff --git a/netbox_dns_bridge/tables.py b/netbox_dns_bridge/tables.py new file mode 100644 index 0000000..b2ac39a --- /dev/null +++ b/netbox_dns_bridge/tables.py @@ -0,0 +1,24 @@ +import django_tables2 as tables +from django.utils.translation import gettext_lazy as _ + +import netbox_dns.models +from netbox.tables import NetBoxTable + + +class CatalogZoneTable(NetBoxTable): + name = tables.Column(linkify=True) + view = tables.Column( + accessor="view__name", + verbose_name=_("View"), + ) + status = tables.Column(verbose_name=_("Status")) + catz_identifier = tables.Column( + accessor="catz_identifier__name", + verbose_name=_("Catalog Zone Identifier"), + default="—", + ) + + class Meta(NetBoxTable.Meta): + model = netbox_dns.models.Zone + fields = ("name", "view", "status", "catz_identifier") + default_columns = ("name", "view", "status", "catz_identifier") diff --git a/netbox_dns_bridge/templates/netbox_dns_bridge/catz_overview.html b/netbox_dns_bridge/templates/netbox_dns_bridge/catz_overview.html index fe2554b..efb6c02 100644 --- a/netbox_dns_bridge/templates/netbox_dns_bridge/catz_overview.html +++ b/netbox_dns_bridge/templates/netbox_dns_bridge/catz_overview.html @@ -1,68 +1,22 @@ -{% extends 'base/layout.html' %} +{% extends 'generic/object_list.html' %} +{% load i18n %} -{% block title %}Catalog Zone Info{% endblock %} +{% block title %}{% trans "Catalog Zone Info" %}{% endblock %} {% block content %} -
| Value | -
|---|
| {{ soa_serial }} | -
| Not yet initialized. |
| Zone | -Active | -Catalog Zone Identifier | -
|---|---|---|
| {{ z.name }} | -{{ z.active|yesno:"Yes,No" }} | -{{ z.catz_identifier|default:"—" }} | -
| No zones in this view. | ||
No zones found.
-