|
@@ -15,9 +15,13 @@ from django.db.models.functions import Cast
|
|
|
from django.contrib.postgres.aggregates import StringAgg
|
|
|
from django.db import connection
|
|
|
from django.core.cache import cache
|
|
|
+from django.contrib.admin.filters import AllValuesFieldListFilter
|
|
|
+from urllib.parse import urlencode
|
|
|
|
|
|
from djgeojson.views import GeoJSONLayerView
|
|
|
|
|
|
+from functools import partial, update_wrapper
|
|
|
+
|
|
|
from djadhere.utils import get_active_filter
|
|
|
from adhesions.models import Adhesion
|
|
|
from .models import Service, ServiceType, IPPrefix, IPResource, Route, Tunnel, ServiceAllocation, Antenna, AntennaAllocation, Allocation
|
|
@@ -375,12 +379,12 @@ class ServiceTypeAdmin(admin.ModelAdmin):
|
|
|
|
|
|
|
|
|
class AntennaAdmin(geo_admin.OSMGeoAdmin):
|
|
|
- list_display = ('id', 'label', 'ip_display')
|
|
|
inlines = (AntennaAllocationInline,)
|
|
|
list_filter = (
|
|
|
AntennaPrefixFilter,
|
|
|
+ ('ssid', AllValuesFieldListFilter),
|
|
|
)
|
|
|
- search_fields = ('=id', 'label', 'notes',)
|
|
|
+ search_fields = ('=id', 'label', 'notes', 'ssid')
|
|
|
raw_id_fields = ('contact',)
|
|
|
|
|
|
def get_queryset(self, request):
|
|
@@ -402,6 +406,12 @@ class AntennaAdmin(geo_admin.OSMGeoAdmin):
|
|
|
)
|
|
|
return qs
|
|
|
|
|
|
+ def get_list_display(self, request):
|
|
|
+ # ssid_display needs request to access query string and preserve filters
|
|
|
+ ssid_display = partial(self.ssid_display, request=request)
|
|
|
+ update_wrapper(ssid_display, self.ssid_display)
|
|
|
+ return ('id', 'label', 'mode', ssid_display, 'ip_display')
|
|
|
+
|
|
|
def ip_display(self, obj):
|
|
|
if connection.vendor == 'postgresql':
|
|
|
return obj.ip
|
|
@@ -411,6 +421,16 @@ class AntennaAdmin(geo_admin.OSMGeoAdmin):
|
|
|
return ', '.join(allocations.values_list('resource__ip', flat=True)) or '-'
|
|
|
ip_display.short_description = 'IP'
|
|
|
|
|
|
+ def ssid_display(self, obj, request):
|
|
|
+ if obj.ssid:
|
|
|
+ qs = request.GET.copy()
|
|
|
+ qs.update({'ssid': obj.ssid})
|
|
|
+ ssid_url = reverse('admin:services_antenna_changelist') + '?' + urlencode(qs)
|
|
|
+ return format_html(u'<a href="{}">{}</a>', ssid_url, obj.ssid)
|
|
|
+ else:
|
|
|
+ return None
|
|
|
+ ssid_display.short_description = 'SSID'
|
|
|
+
|
|
|
def get_actions(self, request):
|
|
|
actions = super().get_actions(request)
|
|
|
if 'delete_selected' in actions:
|