我有这个表格供用户输入他们的邮政编码和他们想要搜索的半径:
class DistanceFilter(forms.ModelForm):
distance = forms.IntegerField()
class Meta:
model = Event
fields = ['zipcode']
这是模板(filter.html):
{% extends 'ItsAllSport/base.html' %}
{% block content %}
{{ block.super }} {# includes previous content in block #}<div class="col-sm-12" style="padding-top: 4%;">
<form action="" method="get">
{{ filter.form.as_p }}
{{ distance }}
<p>Date: <input type="text" id="id_myDate"></p>
<input type="submit" />
</form>
<div class="col-sm-12" style="padding-top: 4%;">
<div class="content">
{% for obj in filter.qs %}
<div class="col-sm-4">
<div class="panel panel-default">
<!-- <div class="panel-image">
<img src={{ groupbuy.main_img }} class="panel-image-preview"/>
</div> -->
<div class="panel-body">
<h4>{{ obj.title }}</h4>
</div>
<div class="panel-footer text-center clearfix">
<a href="#" class="btn btn-alert" id="more_gb_info" role="button">More Info</a>
</div>
</div>
</div>
{% endfor %}
</div>
<div id="scroll-container" class="row">
<div id="card_target"></div>
</div>
</div>
</div>
</div>
{% endblock content %}
views.py:
def event_list(request):
advanced = EventFilter(request.GET, queryset=Event.objects.all())
distance = DistanceFilter(request.POST or None)
results = []
if request.method == 'POST':
form = DistanceFilter(request.POST)
if form.is_valid():
distance = form.cleaned_data['distance']
zipcode = form.cleaned_data['zipcode']
for obj in Event.objects.all():
number = check_distance(zipcode, obj.latitude, obj.longitude)
if number <= distance:
results.append(obj.title)
new = Event.objects.filter(title__in=results)
context = {
'filter': advanced,
'distance': distance,
'new': new,
'categories':EventType.objects.all(),
'event': Event.objects.all(),
'login_form': LoginForm(),
'signup_form': SignupForm(),
}
return render(request, 'ItsAllSport/filter.html', context)
以下是第8行使用的check_distance函数:
import requests
from geopy.distance import vincenty
#takes in the zip code and finds the latitude and longitude
def find_coordinates(zipcode):
url = "https://gist.githubusercontent.com/erichurst/7882666/raw/5bdc46db47d9515269ab12ed6fb2850377fd869e/US%2520Zip%2520Codes%2520from%25202013%2520Government%2520Data"
r = requests.get(url, stream=True)
for line in r.iter_lines():
if line[0:5] == str(zipcode):
coords = {
'lat': line[6:15],
'lon': line[17:]
}
break
return coords
#takes in the zip code the user entered and compares it to each Event in the database
def check_distance(user_zipcode, event_lat, event_long):
coords = find_coordinates(user_zipcode)
user_lat = coords['lat']
user_long = coords['lon']
user = (user_lat, user_long)
event = (event_lat, event_long)
return vincenty(user, event).miles
我认为问题出在views.py文件中。我已经测试了check_distance()并且它工作正常,但是当我尝试在网站上使用过滤器时,它会重新加载页面并且没有任何反应。我没有收到任何错误,因此我认为根本没有使用表单数据。