|
@@ -37,12 +37,16 @@
|
|
|
#
|
|
|
# You should have received a copy of the GNU General Public License along with
|
|
|
# Django Conntrackt. If not, see <http://www.gnu.org/licenses/>.
|
|
|
#
|
|
|
|
|
|
|
|
|
# Standard library imports.
|
|
|
from urlparse import parse_qsl
|
|
|
|
|
|
|
|
|
# Django imports.
|
|
|
from django.contrib import admin
|
|
|
from django.urls import resolve
|
|
|
|
|
|
# Application imports.
|
|
|
from .models import Project, Location, Entity, Interface, Communication
|
|
@@ -227,28 +231,28 @@ class CommunicationAdmin(admin.ModelAdmi
|
|
|
|
|
|
request - Request associated with the calling view.
|
|
|
|
|
|
kwargs - Additional keyword arguments
|
|
|
"""
|
|
|
|
|
|
# Resolve the view name based on the request's path.
|
|
|
view_name = resolve(request.path).view_name
|
|
|
|
|
|
# Only process the source and destination fields that point to
|
|
|
# interfaces.
|
|
|
if db_field.name == "source" or db_field.name == "destination":
|
|
|
# Perform no filtering by default.
|
|
|
interface_filter = {}
|
|
|
|
|
|
# If project was specified in GET requests, add it as a filter.
|
|
|
if 'project' in request.GET:
|
|
|
interface_filter['entity__project'] = request.GET['project']
|
|
|
# If location was specified in GET request, add it as a filter.
|
|
|
if 'location' in request.GET:
|
|
|
interface_filter['entity__location'] = request.GET['location']
|
|
|
# If there are any filtering options for the show interfaces, apply them.
|
|
|
# Parse the filter from URL GET parameter passed-in by the Django Admin.
|
|
|
changelist_filters = dict(parse_qsl(request.GET.get('_changelist_filters', '')))
|
|
|
|
|
|
# Apply project filter if requested.
|
|
|
if 'project' in changelist_filters:
|
|
|
interface_filter['entity__project'] = changelist_filters['project']
|
|
|
# Apply location filter if requested.
|
|
|
if 'location' in changelist_filters:
|
|
|
interface_filter['entity__location'] = changelist_filters['location']
|
|
|
# Apply our filters to queryset if there are any.
|
|
|
if interface_filter:
|
|
|
kwargs["queryset"] = Interface.objects.filter(**interface_filter)
|
|
|
|
|
|
# Call the parent's method so it would do any of its magic.
|
|
|
return super(CommunicationAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
|
|
|
|