mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-08 08:38:16 -06:00
Misc cleanup
This commit is contained in:
parent
e87967046e
commit
9ab354f7e6
@ -45,6 +45,34 @@ class CircuitCircuitTerminationSerializer(WritableNestedSerializer):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class CircuitGroupSerializer(NetBoxModelSerializer):
|
||||||
|
tenant = TenantSerializer(nested=True, required=False, allow_null=True)
|
||||||
|
circuit_count = RelatedObjectCountField('assignments')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = CircuitGroup
|
||||||
|
fields = [
|
||||||
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'tenant',
|
||||||
|
'tags', 'custom_fields', 'created', 'last_updated', 'circuit_count'
|
||||||
|
]
|
||||||
|
brief_fields = ('id', 'url', 'display', 'name')
|
||||||
|
|
||||||
|
|
||||||
|
class CircuitGroupAssignmentSerializer_(NetBoxModelSerializer):
|
||||||
|
"""
|
||||||
|
Base serializer for group assignments under CircuitSerializer.
|
||||||
|
"""
|
||||||
|
group = CircuitGroupSerializer(nested=True)
|
||||||
|
priority = ChoiceField(choices=CircuitPriorityChoices, allow_blank=True, required=False)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = CircuitGroupAssignment
|
||||||
|
fields = [
|
||||||
|
'id', 'url', 'display_url', 'display', 'group', 'priority', 'tags', 'created', 'last_updated',
|
||||||
|
]
|
||||||
|
brief_fields = ('id', 'url', 'display', 'group', 'priority')
|
||||||
|
|
||||||
|
|
||||||
class CircuitSerializer(NetBoxModelSerializer):
|
class CircuitSerializer(NetBoxModelSerializer):
|
||||||
provider = ProviderSerializer(nested=True)
|
provider = ProviderSerializer(nested=True)
|
||||||
provider_account = ProviderAccountSerializer(nested=True, required=False, allow_null=True, default=None)
|
provider_account = ProviderAccountSerializer(nested=True, required=False, allow_null=True, default=None)
|
||||||
@ -53,13 +81,14 @@ class CircuitSerializer(NetBoxModelSerializer):
|
|||||||
tenant = TenantSerializer(nested=True, required=False, allow_null=True)
|
tenant = TenantSerializer(nested=True, required=False, allow_null=True)
|
||||||
termination_a = CircuitCircuitTerminationSerializer(read_only=True, allow_null=True)
|
termination_a = CircuitCircuitTerminationSerializer(read_only=True, allow_null=True)
|
||||||
termination_z = CircuitCircuitTerminationSerializer(read_only=True, allow_null=True)
|
termination_z = CircuitCircuitTerminationSerializer(read_only=True, allow_null=True)
|
||||||
|
assignments = CircuitGroupAssignmentSerializer_(nested=True, many=True, required=False)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Circuit
|
model = Circuit
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant',
|
'id', 'url', 'display_url', 'display', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant',
|
||||||
'install_date', 'termination_date', 'commit_rate', 'description', 'termination_a', 'termination_z',
|
'install_date', 'termination_date', 'commit_rate', 'description', 'termination_a', 'termination_z',
|
||||||
'comments', 'tags', 'custom_fields', 'created', 'last_updated',
|
'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'assignments',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'cid', 'description')
|
brief_fields = ('id', 'url', 'display', 'cid', 'description')
|
||||||
|
|
||||||
@ -79,29 +108,12 @@ class CircuitTerminationSerializer(NetBoxModelSerializer, CabledObjectSerializer
|
|||||||
brief_fields = ('id', 'url', 'display', 'circuit', 'term_side', 'description', 'cable', '_occupied')
|
brief_fields = ('id', 'url', 'display', 'circuit', 'term_side', 'description', 'cable', '_occupied')
|
||||||
|
|
||||||
|
|
||||||
class CircuitGroupSerializer(NetBoxModelSerializer):
|
class CircuitGroupAssignmentSerializer(CircuitGroupAssignmentSerializer_):
|
||||||
# Related object counts
|
|
||||||
circuit_group_assignment_count = RelatedObjectCountField('assignments')
|
|
||||||
tenant = TenantSerializer(nested=True, required=False, allow_null=True)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = CircuitGroup
|
|
||||||
fields = [
|
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'tenant',
|
|
||||||
'tags', 'custom_fields', 'created', 'last_updated', 'circuit_group_assignment_count'
|
|
||||||
]
|
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'circuit_group_assignment_count')
|
|
||||||
|
|
||||||
|
|
||||||
class CircuitGroupAssignmentSerializer(NetBoxModelSerializer):
|
|
||||||
group = CircuitGroupSerializer(nested=True)
|
|
||||||
circuit = CircuitSerializer(nested=True)
|
circuit = CircuitSerializer(nested=True)
|
||||||
priority = ChoiceField(choices=CircuitPriorityChoices, allow_blank=True, required=False)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CircuitGroupAssignment
|
model = CircuitGroupAssignment
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'group', 'circuit', 'priority',
|
'id', 'url', 'display_url', 'display', 'group', 'circuit', 'priority', 'tags', 'created', 'last_updated',
|
||||||
'tags', 'created', 'last_updated',
|
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'group', 'circuit', 'priority')
|
brief_fields = ('id', 'url', 'display', 'group', 'circuit', 'priority')
|
||||||
|
@ -84,7 +84,7 @@ class Migration(migrations.Migration):
|
|||||||
migrations.AddConstraint(
|
migrations.AddConstraint(
|
||||||
model_name='circuitgroupassignment',
|
model_name='circuitgroupassignment',
|
||||||
constraint=models.UniqueConstraint(
|
constraint=models.UniqueConstraint(
|
||||||
fields=('circuit', 'group'), name='circuits_circuitgroupassignment_unique_circuit_assignment'
|
fields=('circuit', 'group'), name='circuits_circuitgroupassignment_unique_circuit_group'
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
@ -11,8 +11,8 @@ from utilities.fields import ColorField
|
|||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'Circuit',
|
'Circuit',
|
||||||
'CircuitGroupAssignment',
|
|
||||||
'CircuitGroup',
|
'CircuitGroup',
|
||||||
|
'CircuitGroupAssignment',
|
||||||
'CircuitTermination',
|
'CircuitTermination',
|
||||||
'CircuitType',
|
'CircuitType',
|
||||||
)
|
)
|
||||||
@ -155,7 +155,7 @@ class Circuit(ContactsMixin, ImageAttachmentsMixin, PrimaryModel):
|
|||||||
|
|
||||||
class CircuitGroup(OrganizationalModel):
|
class CircuitGroup(OrganizationalModel):
|
||||||
"""
|
"""
|
||||||
An arbitrary collection of Circuits.
|
An administrative grouping of Circuits.
|
||||||
"""
|
"""
|
||||||
tenant = models.ForeignKey(
|
tenant = models.ForeignKey(
|
||||||
to='tenancy.Tenant',
|
to='tenancy.Tenant',
|
||||||
@ -167,8 +167,8 @@ class CircuitGroup(OrganizationalModel):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ('name',)
|
ordering = ('name',)
|
||||||
verbose_name = _('Circuit group')
|
verbose_name = _('circuit group')
|
||||||
verbose_name_plural = _('Circuit group')
|
verbose_name_plural = _('circuit groups')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
@ -206,8 +206,8 @@ class CircuitGroupAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin,
|
|||||||
ordering = ('circuit', 'priority', 'pk')
|
ordering = ('circuit', 'priority', 'pk')
|
||||||
constraints = (
|
constraints = (
|
||||||
models.UniqueConstraint(
|
models.UniqueConstraint(
|
||||||
fields=('circuit', 'group',),
|
fields=('circuit', 'group'),
|
||||||
name='%(app_label)s_%(class)s_unique_circuit_assignment'
|
name='%(app_label)s_%(class)s_unique_circuit_group'
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
verbose_name = _('Circuit group assignment')
|
verbose_name = _('Circuit group assignment')
|
||||||
@ -215,8 +215,8 @@ class CircuitGroupAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin,
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
if self.priority:
|
if self.priority:
|
||||||
return f"{self.group} ({self.get_priority_display()}) -> {self.circuit}"
|
return f"{self.group} ({self.get_priority_display()})"
|
||||||
return str(f"{self.group} -> {self.circuit}")
|
return str(self.group)
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse('circuits:circuitgroupassignment', args=[self.pk])
|
return reverse('circuits:circuitgroupassignment', args=[self.pk])
|
||||||
|
@ -158,6 +158,9 @@ class CircuitGroupAssignmentTable(NetBoxTable):
|
|||||||
priority = tables.Column(
|
priority = tables.Column(
|
||||||
verbose_name=_('Priority'),
|
verbose_name=_('Priority'),
|
||||||
)
|
)
|
||||||
|
tags = columns.TagColumn(
|
||||||
|
url_name='circuits:circuitgroupassignment_list'
|
||||||
|
)
|
||||||
|
|
||||||
class Meta(NetBoxTable.Meta):
|
class Meta(NetBoxTable.Meta):
|
||||||
model = CircuitGroupAssignment
|
model = CircuitGroupAssignment
|
||||||
|
@ -208,7 +208,7 @@ class CircuitTerminationTest(APIViewTestCases.APIViewTestCase):
|
|||||||
|
|
||||||
class CircuitGroupTest(APIViewTestCases.APIViewTestCase):
|
class CircuitGroupTest(APIViewTestCases.APIViewTestCase):
|
||||||
model = CircuitGroup
|
model = CircuitGroup
|
||||||
brief_fields = ['circuit_group_assignment_count', 'description', 'display', 'id', 'name', 'slug', 'url']
|
brief_fields = ['display', 'id', 'name', 'url']
|
||||||
bulk_update_data = {
|
bulk_update_data = {
|
||||||
'description': 'New description',
|
'description': 'New description',
|
||||||
}
|
}
|
||||||
|
@ -558,10 +558,7 @@ class CircuitGroupAssignmentTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
groups = CircuitGroup.objects.filter(name__in=['Circuit Group 1', 'Circuit Group 2'])
|
groups = CircuitGroup.objects.filter(name__in=['Circuit Group 1', 'Circuit Group 2'])
|
||||||
params = {'group_id': [groups[0].pk, groups[1].pk]}
|
params = {'group_id': [groups[0].pk, groups[1].pk]}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
params = {'group': [groups[0].slug, groups[1].slug]}
|
||||||
def test_circuit_group_slug(self):
|
|
||||||
groups = CircuitGroup.objects.filter(slug__in=['circuit-group-1', 'circuit-group-2'])
|
|
||||||
params = {'group_id': [groups[0].pk, groups[1].pk]}
|
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_circuit_id(self):
|
def test_circuit_id(self):
|
||||||
|
@ -259,9 +259,9 @@ CIRCUITS_MENU = Menu(
|
|||||||
items=(
|
items=(
|
||||||
get_model_item('circuits', 'circuit', _('Circuits')),
|
get_model_item('circuits', 'circuit', _('Circuits')),
|
||||||
get_model_item('circuits', 'circuittype', _('Circuit Types')),
|
get_model_item('circuits', 'circuittype', _('Circuit Types')),
|
||||||
get_model_item('circuits', 'circuittermination', _('Circuit Terminations')),
|
|
||||||
get_model_item('circuits', 'circuitgroup', _('Circuit Groups')),
|
get_model_item('circuits', 'circuitgroup', _('Circuit Groups')),
|
||||||
get_model_item('circuits', 'circuitgroupassignment', _('Circuit Group Assignments')),
|
get_model_item('circuits', 'circuitgroupassignment', _('Group Assignments')),
|
||||||
|
get_model_item('circuits', 'circuittermination', _('Circuit Terminations')),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
MenuGroup(
|
MenuGroup(
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
{% block extra_controls %}
|
{% block extra_controls %}
|
||||||
{% if perms.circuit.add_circuitgroupassignment %}
|
{% if perms.circuit.add_circuitgroupassignment %}
|
||||||
<a href="{% url 'circuits:circuitgroupassignment_add' %}?group={{ object.pk }}" class="btn btn-primary">
|
<a href="{% url 'circuits:circuitgroupassignment_add' %}?group={{ object.pk }}" class="btn btn-primary">
|
||||||
<span class="mdi mdi-plus-thick" aria-hidden="true"></span> {% trans "Add Circuit Assignment" %}
|
<span class="mdi mdi-plus-thick" aria-hidden="true"></span> {% trans "Assign Circuit" %}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock extra_controls %}
|
{% endblock extra_controls %}
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
|
|
||||||
{% block breadcrumbs %}
|
{% block breadcrumbs %}
|
||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
<li class="breadcrumb-item"><a href="{% url 'circuits:circuitgroup_list' %}?circuitgroup_id={{ object.id }}">{{ object.name }}</a></li>
|
<li class="breadcrumb-item">
|
||||||
|
<a href="{% url 'circuits:circuitgroupassignment_list' %}?group_id={{ object.group_id }}">{{ object.group }}</a>
|
||||||
|
</li>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
@ -34,5 +36,13 @@
|
|||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
{% plugin_left_page object %}
|
{% plugin_left_page object %}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col col-md-6">
|
||||||
|
{% plugin_right_page object %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-md-12">
|
||||||
|
{% plugin_full_width_page object %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
Loading…
Reference in New Issue
Block a user