Django:处理views.py中的表单数据

时间:2017-03-21 02:10:45

标签: python django

我有这个表格供用户输入他们的邮政编码和他们想要搜索的半径:

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()并且它工作正常,但是当我尝试在网站上使用过滤器时,它会重新加载页面并且没有任何反应。我没有收到任何错误,因此我认为根本没有使用表单数据。

0 个答案:

没有答案