far*_*odg 3 python forms django validation
我正在创建一个网络应用程序,主页是用户选择他们的位置的地方。主页模板的视图在我的数据库中查询位置列表并填充下拉列表。用户点击提交后,我验证表单数据,如果他们选择了一个有效的城市(即它存在于我的数据库中),我想将它们重定向到另一个页面,显示该城市当天的交易。我的问题基于 Django 中的基本视图/表单设计。如何将城市传递到下一页?基本上我想做以下事情:
首页 -> 提交表单 -> 调用方法验证表单 -> 表单将用户重定向到另一个页面
我是否必须创建单独的验证视图/页面进行验证?表单采用动作参数,所以我猜我必须将动作设置为 /validate/,这将调用我的 validate_form() 方法(通过 urls.py 文件),然后将它们重定向到适当的页面。
在我继续实施之前,我只是想由某人来运行我的想法。谢谢你的时间。
为什么要验证城市?只需重定向到该城市,如果该城市不存在,则会显示 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)