Browse Source

Fixes #108: Added search for Sites

Jeremy Stretch 8 years ago
parent
commit
fbbdb3807c

+ 23 - 0
netbox/dcim/filters.py

@@ -8,6 +8,29 @@ from .models import (
 )
 
 
+class SiteFilter(django_filters.FilterSet):
+    q = django_filters.MethodFilter(
+        action='search',
+        label='Search',
+    )
+
+    class Meta:
+        model = Site
+        fields = ['q', 'name', 'facility', 'asn']
+
+    def search(self, queryset, value):
+        value = value.strip()
+        qs_filter = Q(name__icontains=value) |\
+                    Q(facility__icontains=value) |\
+                    Q(physical_address__icontains=value) |\
+                    Q(shipping_address__icontains=value)
+        try:
+            qs_filter |= Q(asn=int(value))
+        except ValueError:
+            pass
+        return queryset.filter(qs_filter)
+
+
 class RackGroupFilter(django_filters.FilterSet):
     site_id = django_filters.ModelMultipleChoiceFilter(
         name='site',

+ 1 - 0
netbox/dcim/views.py

@@ -61,6 +61,7 @@ def expand_pattern(string):
 
 class SiteListView(ObjectListView):
     queryset = Site.objects.all()
+    filter = filters.SiteFilter
     table = tables.SiteTable
     template_name = 'dcim/site_list.html'
 

+ 20 - 0
netbox/templates/dcim/site.html

@@ -6,6 +6,26 @@
 {% block title %}{{ site }}{% endblock %}
 
 {% block content %}
+<div class="row">
+    <div class="col-md-9">
+        <ol class="breadcrumb">
+            <li><a href="{% url 'dcim:site_list' %}">Sites</a></li>
+            <li>{{ site }}</li>
+        </ol>
+    </div>
+    <div class="col-md-3">
+        <form action="{% url 'dcim:site_list' %}" method="get">
+            <div class="input-group">
+                <input type="text" name="q" class="form-control" placeholder="Search" />
+                <span class="input-group-btn">
+                    <button type="submit" class="btn btn-primary">
+                        <span class="glyphicon glyphicon-search" aria-hidden="true"></span>
+                    </button>
+                </span>
+            </div>
+        </form>
+    </div>
+</div>
 <div class="pull-right">
     <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#graphs_modal" data-obj="{{ site.name }}" data-url="{% url 'dcim-api:site_graphs' pk=site.pk %}" title="Show graphs">
         <i class="glyphicon glyphicon-signal" aria-hidden="true"></i>

+ 24 - 1
netbox/templates/dcim/site_list.html

@@ -14,5 +14,28 @@
     {% include 'inc/export_button.html' with obj_type='sites' %}
 </div>
 <h1>Sites</h1>
-{% render_table table 'table.html' %}
+<div class="row">
+	<div class="col-md-9">
+        {% render_table table 'table.html' %}
+    </div>
+    <div class="col-md-3">
+		<div class="panel panel-default">
+			<div class="panel-heading">
+				<strong>Search</strong>
+			</div>
+			<div class="panel-body">
+				<form action="{% url 'dcim:site_list' %}" method="get">
+					<div class="input-group">
+						<input type="text" name="q" class="form-control" placeholder="Name" {% if request.GET.q %}value="{{ request.GET.q }}" {% endif %}/>
+						<span class="input-group-btn">
+							<button type="submit" class="btn btn-primary">
+								<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
+							</button>
+						</span>
+					</div>
+				</form>
+			</div>
+		</div>
+    </div>
+</div>
 {% endblock %}