form_valid无法在Django中调用

问题描述 投票:0回答:1

我遵循了出色的指南(https://matthewdaly.co.uk/blog/2016/03/26/building-a-location-aware-web-app-with-geodjango/,并在Django 1.9 / Python 3中开发了一个运行良好的应用程序。

现在,我正在尝试将上述应用程序集成到Django 1.8 / Python 2.7的一个真正的django项目中。我再次按照上述指南修改了Django 1.8 / python 2.7的代码。提交数据时出现问题。无法调用form_valid。我的models.py:

from django.contrib.gis.db import models

class Venue(models.Model):
    name = models.CharField(max_length=200)
    location = models.PointField()
    def __str__(self):
        return self.name

class Event(models.Model):
    name = models.CharField(max_length=200)
    datetime = models.DateTimeField()
    venue = models.ForeignKey(Venue)
    def __str__(self):
         return "%s - %s" % (self.name, self.venue.name)

我的views.py:

class LookupView(FormView):
template_name = 'gigs/lookupresults.html'
form_class = LookupForm
success_url = '/'

def get(self, request):

    return render_to_response('gigs/lookup.html', RequestContext(request))

def form_valid(self, form):
    # Get data

    latitude = form.cleaned_data['latitude']
    longitude = form.cleaned_data['longitude']

    # Get today's date
    now = timezone.now()

    # Get next week's date
    next_week = now + timezone.timedelta(weeks=1)

    # Get Point
    location = Point(longitude, latitude, srid=4326)

    # Look up events
    events =  Event.objects.filter(datetime__gte=timezone.now()).filter(datetime__lte=next_week)

    # Render the template
    return render_to_response('gigs/lookupresults.html', {
        'events': events
    })

我的urls.py:

urlpatterns = patterns(
'my_project.gigs.views',
url(r'^$',  LookupView.as_view(), name='lookup'),
)

我的forms.py:

from django.forms import Form, FloatField

class LookupForm(Form):
    latitude = FloatField()
    longitute = FloatField()

我的第一个模板lookup.html

{% extends "gigs/gigs_base.html" %}
{% block content %}

<form role="form" action="/gigs/" method="post">{% csrf_token %}
    <div class="form-group">
        <label for="latitude">Latitude:</label>
        <input id="id_latitude" name="latitude" type="text" class="form-control"></input>
     </div>

    <div class="form-group">
        <label for="longitude">Longitude:</label>
        <input id="id_longitude" name="longitude" type="text" class="form-control"></input>
     </div>

    <input class="btn btn-primary" type="submit" value="Submit" />
    </form>
<script language="javascript" type="text/javascript">
    navigator.geolocation.getCurrentPosition(function (position) {
        var lat = document.getElementById('id_latitude');
        var lon = document.getElementById('id_longitude');
        lat.value = position.coords.latitude;
        lon.value = position.coords.longitude;
        });
 </script>
 {% endblock %}

提交后我的模板:

{% extends "gigs/gigs_base.html" %}
{% block content %}
<ul>
{% for event in events %}
     <li>{{ event.name }} - {{ event.venue.name }}</li>
{% endfor %}
</ul>
{% endblock %}

当我运行localhost:8000 / gigs时,模板可以很好地显示,但是当我提交数据时,它什么也不显示。同样,当我执行命令时:

Event.objects.filter(datetime__gte=timezone.now()).filter(datetime__lte=next_week)

在django shell中工作正常。我无法弄清楚为什么我按照上述指南开发的第一个简单应用程序能正常运行,而新的集成应用程序却无法正常运行。有什么建议吗?

python django geodjango formview
1个回答
0
投票

在模板lookup.html中,您已设置:

<form role="form" action="/gigs/" method="post">

尝试将其更改为:

<form role="form" method="post">

© www.soinside.com 2019 - 2024. All rights reserved.