mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-22 20:12:00 -06:00
Closes #984: Allow ordering circuits by A/Z side
This commit is contained in:
parent
2bb9464905
commit
6c3c6fba62
@ -1,3 +1,11 @@
|
|||||||
|
v2.6.2 (FUTURE)
|
||||||
|
|
||||||
|
## Enhancements
|
||||||
|
|
||||||
|
* [#984](https://github.com/digitalocean/netbox/issues/984) - Allow ordering circuits by A/Z side
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
v2.6.1 (2019-06-25)
|
v2.6.1 (2019-06-25)
|
||||||
|
|
||||||
## Enhancements
|
## Enhancements
|
||||||
|
@ -20,15 +20,6 @@ STATUS_LABEL = """
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class CircuitTerminationColumn(tables.Column):
|
|
||||||
|
|
||||||
def render(self, value):
|
|
||||||
return mark_safe('<a href="{}">{}</a>'.format(
|
|
||||||
value.site.get_absolute_url(),
|
|
||||||
value.site
|
|
||||||
))
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Providers
|
# Providers
|
||||||
#
|
#
|
||||||
@ -77,9 +68,13 @@ class CircuitTable(BaseTable):
|
|||||||
provider = tables.LinkColumn('circuits:provider', args=[Accessor('provider.slug')])
|
provider = tables.LinkColumn('circuits:provider', args=[Accessor('provider.slug')])
|
||||||
status = tables.TemplateColumn(template_code=STATUS_LABEL, verbose_name='Status')
|
status = tables.TemplateColumn(template_code=STATUS_LABEL, verbose_name='Status')
|
||||||
tenant = tables.TemplateColumn(template_code=COL_TENANT)
|
tenant = tables.TemplateColumn(template_code=COL_TENANT)
|
||||||
termination_a = CircuitTerminationColumn(orderable=False, verbose_name='A Side')
|
a_side = tables.Column(
|
||||||
termination_z = CircuitTerminationColumn(orderable=False, verbose_name='Z Side')
|
verbose_name='A Side'
|
||||||
|
)
|
||||||
|
z_side = tables.Column(
|
||||||
|
verbose_name='Z Side'
|
||||||
|
)
|
||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = Circuit
|
model = Circuit
|
||||||
fields = ('pk', 'cid', 'status', 'type', 'provider', 'tenant', 'termination_a', 'termination_z', 'description')
|
fields = ('pk', 'cid', 'status', 'type', 'provider', 'tenant', 'a_side', 'z_side', 'description')
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
from django.conf import settings
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import permission_required
|
from django.contrib.auth.decorators import permission_required
|
||||||
from django.contrib.auth.mixins import PermissionRequiredMixin
|
from django.contrib.auth.mixins import PermissionRequiredMixin
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Count
|
from django.db.models import Count, OuterRef, Subquery
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.utils.decorators import method_decorator
|
|
||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
|
|
||||||
from extras.models import Graph, GRAPH_TYPE_PROVIDER
|
from extras.models import Graph, GRAPH_TYPE_PROVIDER
|
||||||
@ -135,10 +133,14 @@ class CircuitTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
|||||||
|
|
||||||
class CircuitListView(PermissionRequiredMixin, ObjectListView):
|
class CircuitListView(PermissionRequiredMixin, ObjectListView):
|
||||||
permission_required = 'circuits.view_circuit'
|
permission_required = 'circuits.view_circuit'
|
||||||
|
_terminations = CircuitTermination.objects.filter(circuit=OuterRef('pk'))
|
||||||
queryset = Circuit.objects.select_related(
|
queryset = Circuit.objects.select_related(
|
||||||
'provider', 'type', 'tenant'
|
'provider', 'type', 'tenant'
|
||||||
).prefetch_related(
|
).prefetch_related(
|
||||||
'terminations__site'
|
'terminations__site'
|
||||||
|
).annotate(
|
||||||
|
a_side=Subquery(_terminations.filter(term_side='A').values('site__name')[:1]),
|
||||||
|
z_side=Subquery(_terminations.filter(term_side='Z').values('site__name')[:1]),
|
||||||
)
|
)
|
||||||
filter = filters.CircuitFilter
|
filter = filters.CircuitFilter
|
||||||
filter_form = forms.CircuitFilterForm
|
filter_form = forms.CircuitFilterForm
|
||||||
|
Loading…
Reference in New Issue
Block a user