【发布时间】:2018-07-03 10:53:46
【问题描述】:
我有一个列表视图,它显示顶部有一个简单过滤器的对象列表(“扬声器”)。
在模板中我放了以下代码
<form class="col-md-5" method="get">
<div class="input-group">
<select name="type" class="selectpicker" multiple>
{% for type in types %}
<option><a href="#">{{ type.name }}</a></option>
{% endfor %}
</select>
<span class="input-group-btn"><button class="btn btn-gray" type="submit">Search</button></span>
</div>
</form>
类型由列表视图中的“get_context_data”方法提供,就像这样
def get_context_data(self, **kwargs):
data = super(SpeakerList, self).get_context_data(**kwargs)
typelist = [x for x in Type.objects.all()]
data['types'] = typelist
return data
过滤器是 'get_queryset' 方法中的句柄,就像这样
def get_queryset(self, **kwargs):
qs = super(SpeakerList,self).get_queryset().filter(status=STATE_ACTIVE)
types = self.request.GET.getlist('type', None)
categories = self.request.GET.getlist('category', None)
if types:
qs = qs.filter(type__in=types)
if categories:
qs = categories.filter(categories__in=categories)
return qs
到目前为止,一切都很好。但是,我想在模板中显示所有选定的过滤器,它们后面有一个“删除”按钮,以便用户可以删除特定的过滤器。 然后模板看起来像这样
[类型选择下拉菜单]。
[ 日间发言人 'X'] 。 [周末演讲者'X']
对象列表
提供使用的过滤器很容易,我在 get_context_data 中添加了以下代码
types_query = self.request.GET.getlist('type', None)
data['types_query']
并在我的模板中使用了以下代码:
{% if types_query %}
<p>You used the following 'type' filters:</p>
{% for type in types_query %}
<p>{{ type }} <button>Remove</button> </p>
{% endfor %}
{% endif %}
但是,我不确定如何从这里开始。该列表按应有的方式呈现,但我不知道如何制作 'remove filter' 。功能性工作。
如果我将上面的代码包含在一个表单中并发布,它将清除整个查询集。但是,如果我不这样做,表单将无法访问当前选择的过滤器。
我在很多网站上都看到过这样的功能,所以我知道应该可以。这里有人知道我做错了什么吗?
【问题讨论】: