Add region & site group panels

This commit is contained in:
Jeremy Stretch 2025-10-30 15:34:44 -04:00
parent 1acd567706
commit 83de784196
4 changed files with 13 additions and 34 deletions

View File

@ -17,6 +17,7 @@ from extras.views import ObjectConfigContextView, ObjectRenderConfigView
from ipam.models import ASN, IPAddress, Prefix, VLANGroup, VLAN from ipam.models import ASN, IPAddress, Prefix, VLANGroup, VLAN
from ipam.tables import InterfaceVLANTable, VLANTranslationRuleTable from ipam.tables import InterfaceVLANTable, VLANTranslationRuleTable
from netbox.object_actions import * from netbox.object_actions import *
from netbox.ui.components import NestedGroupObjectPanel
from netbox.views import generic from netbox.views import generic
from utilities.forms import ConfirmationForm from utilities.forms import ConfirmationForm
from utilities.paginator import EnhancedPaginator, get_paginate_count from utilities.paginator import EnhancedPaginator, get_paginate_count
@ -227,6 +228,7 @@ class RegionView(GetRelatedModelsMixin, generic.ObjectView):
regions = instance.get_descendants(include_self=True) regions = instance.get_descendants(include_self=True)
return { return {
'region_panel': NestedGroupObjectPanel(instance, _('Region')),
'related_models': self.get_related_models( 'related_models': self.get_related_models(
request, request,
regions, regions,
@ -338,6 +340,7 @@ class SiteGroupView(GetRelatedModelsMixin, generic.ObjectView):
groups = instance.get_descendants(include_self=True) groups = instance.get_descendants(include_self=True)
return { return {
'sitegroup_panel': NestedGroupObjectPanel(instance, _('Site Group')),
'related_models': self.get_related_models( 'related_models': self.get_related_models(
request, request,
groups, groups,

View File

@ -2,7 +2,9 @@ from abc import ABC, ABCMeta, abstractmethod
from functools import cached_property from functools import cached_property
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.utils.translation import gettext_lazy as _
from netbox.ui import attrs
from netbox.ui.attrs import Attr from netbox.ui.attrs import Attr
from utilities.string import title from utilities.string import title
@ -52,3 +54,9 @@ class ObjectPanel(Component, metaclass=ObjectDetailsPanelMeta):
def __str__(self): def __str__(self):
return self.render() return self.render()
class NestedGroupObjectPanel(ObjectPanel):
name = attrs.TextAttr('name', label=_('Name'))
description = attrs.TextAttr('description', label=_('Description'))
parent = attrs.NestedObjectAttr('parent', label=_('Parent'), linkify=True)

View File

@ -22,23 +22,7 @@
{% block content %} {% block content %}
<div class="row mb-3"> <div class="row mb-3">
<div class="col col-12 col-md-6"> <div class="col col-12 col-md-6">
<div class="card"> {{ region_panel }}
<h2 class="card-header">{% trans "Region" %}</h2>
<table class="table table-hover attr-table">
<tr>
<th scope="row">{% trans "Name" %}</th>
<td>{{ object.name }}</td>
</tr>
<tr>
<th scope="row">{% trans "Description" %}</th>
<td>{{ object.description|placeholder }}</td>
</tr>
<tr>
<th scope="row">{% trans "Parent" %}</th>
<td>{{ object.parent|linkify|placeholder }}</td>
</tr>
</table>
</div>
{% include 'inc/panels/tags.html' %} {% include 'inc/panels/tags.html' %}
{% include 'inc/panels/custom_fields.html' %} {% include 'inc/panels/custom_fields.html' %}
{% include 'inc/panels/comments.html' %} {% include 'inc/panels/comments.html' %}

View File

@ -22,23 +22,7 @@
{% block content %} {% block content %}
<div class="row mb-3"> <div class="row mb-3">
<div class="col col-12 col-md-6"> <div class="col col-12 col-md-6">
<div class="card"> {{ sitegroup_panel }}
<h2 class="card-header">{% trans "Site Group" %}</h2>
<table class="table table-hover attr-table">
<tr>
<th scope="row">{% trans "Name" %}</th>
<td>{{ object.name }}</td>
</tr>
<tr>
<th scope="row">{% trans "Description" %}</th>
<td>{{ object.description|placeholder }}</td>
</tr>
<tr>
<th scope="row">{% trans "Parent" %}</th>
<td>{{ object.parent|linkify|placeholder }}</td>
</tr>
</table>
</div>
{% include 'inc/panels/tags.html' %} {% include 'inc/panels/tags.html' %}
{% include 'inc/panels/custom_fields.html' %} {% include 'inc/panels/custom_fields.html' %}
{% include 'inc/panels/comments.html' %} {% include 'inc/panels/comments.html' %}