add search feature

master
Tait Hoyem 4 years ago
parent 07dfe6a794
commit 4e6771e067

@ -7,6 +7,11 @@ class Address(models.Model):
address = models.CharField(max_length=128)
# TODO: add validation columns in relation to city
city = models.CharField(max_length=32)
def toDict(self):
return {
'address': self.address,
'id': self.id
}
class PDF(models.Model):
path = models.CharField(max_length=64)

@ -2,8 +2,17 @@
<html>
<head>
<title>{% block title %}{% endblock %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
nav {
background-color: lightgrey;
}
a { padding: 12px; display: block; border: 1px solid black; }
nav > a { display: inline-block; }
</style>
</head>
<body>
{% include 'common/navbar.html' %}
{% block body %}
{% endblock %}
</body>

@ -0,0 +1,8 @@
<nav>
{% if user.is_authenticated %}
<a href="{% url 'logout' %}">Log Out</a>
{% else %}
<a href="{% url 'login' %}">Log In</a>
{% endif %}
<a href="{% url 'index' %}">Home</a>
</nav>

@ -1,7 +1,29 @@
{% extends 'common/master.html' %}
{% block body %}
<h1>Download Your Quote</h1>
{% for thing in things %}
<p><a href="./d/{{ thing.id }}">{{ thing.address }}</a></p>
{% endfor %}
<label for="addr">Address</label>
<input id="addr" type="text">
<ul id="addrlist"></ul>
<script>
const ADDR_BOX = document.getElementById('addr');
const SEARCH_URL = '/download/search/';
const ADDR_LIST = document.getElementById('addrlist');
ADDR_BOX.oninput = async (e) => {
const ADDR_INPUT = e.target.value;
console.log(e.target.value);
let response = await fetch(SEARCH_URL + ADDR_INPUT);
let addresses = await response.json();
console.log(addresses);
ADDR_LIST.innerHTML = '';
for (address of addresses) {
let li = document.createElement('li');
let alink = document.createElement('a');
alink.href = '/download/d/' + address.id;
alink.innerText = address.address;
li.appendChild(alink);
ADDR_LIST.appendChild(li);
}
}
</script>
{% endblock %}

@ -4,4 +4,5 @@ from . import views
urlpatterns = [
path('', views.starter, name='download'),
path('d/<pdfid>/', views.download, name='download_f'),
path('search/<addr>/', views.search, name='search'),
]

@ -1,7 +1,8 @@
from django.shortcuts import render, HttpResponse
from django.shortcuts import render, HttpResponse
from django.http import FileResponse
from .models import Address, PDF
from .forms import CodeForm
import json
# Create your views here.
def starter(request):
@ -9,6 +10,13 @@ def starter(request):
'things': list(Address.objects.all())
})
def search(request, addr):
if len(addr) <= 3:
return HttpResponse(json.dumps([]))
return HttpResponse(json.dumps(
[x.toDict() for x in Address.objects.filter(address__startswith=addr)]
))
def download(request, pdfid):
if request.method == 'POST':
form = CodeForm(request.POST)

Loading…
Cancel
Save