Django 表单和在视图/页面之间传递数据

far*_*odg 3 python forms django validation

我正在创建一个网络应用程序,主页是用户选择他们的位置的地方。主页模板的视图在我的数据库中查询位置列表并填充下拉列表。用户点击提交后,我验证表单数据,如果他们选择了一个有效的城市(即它存在于我的数据库中),我想将它们重定向到另一个页面,显示该城市当天的交易。我的问题基于 Django 中的基本视图/表单设计。如何将城市传递到下一页?基本上我想做以下事情:

首页 -> 提交表单 -> 调用方法验证表单 -> 表单将用户重定向到另一个页面

我是否必须创建单独的验证视图/页面进行验证?表单采用动作参数,所以我猜我必须将动作设置为 /validate/,这将调用我的 validate_form() 方法(通过 urls.py 文件),然后将它们重定向到适当的页面。

在我继续实施之前,我只是想由某人来运行我的想法。谢谢你的时间。

cat*_*ran 5

为什么要验证城市?只需重定向到该城市,如果该城市不存在,则会显示 404 页面。

你的模板

<form action="{% url 'choose_city' %}" method="POST">
    <select name="city">
    {% for city in cities %}
        <option value="{{ city.id }}">{{ city.name }}</option>
    {% endfor %}
    </select>
    <button>Show deals</button>
</form>
Run Code Online (Sandbox Code Playgroud)

网址.py

url(r'^choose/$', views.choose_city, name='choose_city'),
url(r'^deals/(?P<city_id>\d+)/$', views.deals_by_city, name='deals_by_city'),
Run Code Online (Sandbox Code Playgroud)

视图.py

from django.shortcuts import get_object_or_404, redirect, render

def choose_city(request):
    return redirect('deals_by_city', city_id=request.POST['city'])

def deals_by_city(request, city_id):
    city = get_object_or_404(City, pk=city_id)
    deals = Deal.objects.filter(city=city)
    return render(request, 'deals_by_city.html', {'city': city,
                                                  'deals': deals})
Run Code Online (Sandbox Code Playgroud)