python - [Django]从下拉列表中选择项目后如何返回值以查看
问题描述
尽管我阅读了 django 文档,但我仍然很困惑如何使用 request.POST 从下拉列表中获取值以对数据库进行查询。以及如何将所选值的详细信息返回到前端以显示结果?
假设我可以在下拉框中选择“地区”,它将返回该地区类别下该餐厅的详细信息
一流餐厅
class Restaurant(models.Model):
restId = models.AutoField(db_column='restId', primary_key=True)
restName = models.TextField(db_column='restName')
phone = models.IntegerField()
address = models.TextField()
ratings = models.DecimalField(max_digits=2, decimal_places=1)
cuisine = models.TextField()
region = models.TextField()
last_modify_date = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
class Meta:
managed = True
db_table = "restaurant"
视图.py
# def index_view(request):
# rest_list = Restaurant.objects.all()
# context = {
# 'rest_list': rest_list
# }
# return render(request, 'index.html', context)
def get_name(request):
# region = Restaurant.objects.all().order_by('region').values_list('region', flat=True)
if request.method == 'GET':
rest_form = RestaurantForm()
return render(request, 'index.html', {'rest_form': rest_form})
索引.html
{% block content %}
<form action="" method="post">
{% csrf_token %}
<select name = "rest_value">
{% for rest in rest_form %}
<option value = {{ rest }} ></option>
{% endfor %}
</select>
<input type="submit" value="Select" name="region">
</form>
{% endblock %}
表格.py
from django.forms import ModelForm
from .models import Restaurant
class RestaurantForm(ModelForm):
class Meta:
model = Restaurant
fields = ['region']
解决方案
要在您的问题的上下文中提供答案,您可以使用以下代码使其工作(注意:未经测试);但请参阅底部的注释:
蟒蛇视图:
def index_view(request):
selected_region = None
restaurants = Restaurant.objects.all()
if request.method == "POST":
# Filter restaurants by selected region, but only on a POST
selected_region = request.POST.get("region")
restaurants = restaurants.filter(region=selected_region)
# Get a list of all unique regions (group by region)
regions = Restaurant.objects.order_by('region').values_list('region', flat=True)
context = {
'regions': regions,
'restaurants': restaurants,
'selected_region': selected_region
}
return render(request, 'index.html', context)
Django模板:
<h1>Index</h1>
<form method="post">
<select name="region">
{% for region in regions %}
<option
value="{{ region }}"
{% if selected_region == region %}
selected="selected"
{% endif %}
>{{ region }}</option>
{% endfor %}
</select>
<input type="submit" value="Select">
</form>
{% if selected_region %}
<p>
Nice, you selected: {{ selected_region }}!
</p>
<p>
Restaurants in this region:
</p>
<ul>
{% for restaurant in restaurants %}
<li>{{ restaurant.restName }}</li>
{% endfor %}
</ul>
{% endif %}
几点:
- 您在代码中将表单命名
action
为“selectRegion”。这会将其发布到不同的 URL。在我的示例中,我已从action
表单中删除,以便将其发布回与index.html
. - 如果您有很多“区域”,您可能希望将它们存储在不同的表中并
region
在Restuarant
. - 正如其他人指出的那样,您应该认真考虑改用Django 表单。主要原因是 Django 在使用内置表单功能时,已经处理了大部分繁重的工作:清理、验证和渲染。
推荐阅读
- php - 准备好的语句在执行时失败
- javascript - 从 Firebase 托管到 Firebase 功能的请求被 CORS 阻止
- javascript - 为阅读更多/更少按钮截断内联 HTML
- angular - 如何获取选择选项的选定值?
- r - RDCOMClient + Outlook 电子邮件搜索使用 R 中的日期间隔
- c++ - C++ 程序中出现明显的浮点错误
- android - 我应该在哪里链接 MVVM 中的多个网络请求?用例还是存储库?
- java - 导入库后找不到主类
- android - 如何在 Android-studio 3.4.1 上使用 api 9 编写 Android 应用程序?
- tensorflow - 如何在 Tensorfow 中获得多标签的准确性?