【发布时间】:2020-04-19 03:17:25
【问题描述】:
我正在使用 GET 方法进行过滤,我希望能够只删除特定的过滤器,我该怎么做?
现在我有一个带有令牌字段的表单,所以我得到了国家和城镇的 ID:
<form id="search" method="GET" action="{% url 'selection'%}">
<div class="bg-grey text-center">
<input type="text" class="form-control" id="tokenfield1" name="country">
</div>
{% if filteredcountries %}
<table class="table table-list">
{% for c in filteredcountries %}
<tr>
<td><button type="button" class="btn btn-xs btn-danger" data-remove="{{c.id}}"><i class="fas fa-times"></i></button></td>
<td>{{c.country_name`}}</td>
</tr>
{% endfor %}
</table>
{% endif %}
<div class="bg-grey text-center">
<input type="text" class="form-control" id="tokenfield2" name="town">
</div>
{% if filteredtowns %}
<table class="table table-list">
{% for t in filteredtowns %}
<tr>
<td><button type="button" class="btn btn-xs btn-danger" data-remove="{{t.id}}"><i class="fas fa-times"></i></button></td>
<td>{{t.town_name}}</td>
</tr>
{% endfor %}
</table>
{% endif %}
views.py:
def defense_planning(request):
countries = request.GET.get('country')
if not countries:
countries = []
else:
countries = countries.split(', ')
towns = request.GET.get('town')
if not towns:
towns = []
else:
towns = towns.split(', ')
results = Hotel.objects.filter(Q(town_id__in = towns) | Q(country_id__in = countries))
context = {
'filteredcountries': countries,
'filteredtowns': towns,
'hotels': results
}
return render(request, 'myapp/hotels.html', context)
现在我想单击按钮并从 GET 中删除特定的城镇或国家,并保留其他的。你能引导我找到解决方案吗?
按钮点击前的示例网址:
..myapp/hotels?country=2%2C+4&town=2
按钮点击后的网址,国家 ID 为 2:
..myapp/hotels?country=4&town=2
或在按钮点击城镇 id 2 后:
..myapp/hotels?country=2%2C+4&town=
【问题讨论】:
-
%2c是一个逗号,所以它基本上是country=2, 4。 -
是的,但这在我的问题中并不重要。
-
您是否有任何理由要在 GET 中而不是在您的视图中这样做?如果你真的需要修改 url,你可以选择 javascript 吗?
-
@Chris 如果 url 发生变化,我不介意这样做。是的,javascript 可能是。在他删除其中一个参数后,我需要以某种方式使用 get params 更改 url。
标签: django forms django-templates django-views