如何使用 Django-Haystack 预先 select 方面(即在页面加载时获得 selected 复选框)?
How to pre-select facets (i.e. get selected checkbox on page load) using Django-Haystack?
在下图中,您可以看到 cpu_producer == ""
时面的外观(即没有 selected)。
有些情况下 cpu_producer
可能是 AMD 或 INTEL,并且在页面加载时必须 select 编辑适当的方面的复选框。如何在后端 select 它以便在前端进行适当过滤 cpu?
if category.slug == 'cpu':
possible_sockets = '(socket_exact:"LGA1151" OR socket_exact:"LGA2066" OR socket_exact:"AM4" OR socket_exact:"TR4")'
sqs = sqs.narrow(possible_sockets)
possible_producers = '(producer_exact:"AMD" OR producer_exact:"INTEL")'
sqs = sqs.narrow(possible_producers)
cpu_producer = RECEIVED_VALUE # "AMD" or "INTEL" or ""
# I NEED SOMETHING LIKE THIS.
if cpu_producer:
sqs.PRESELECT(producer=cpu_producer)
源代码挖掘使我找到了文件 haystack/forms.py
。似乎 class FacetedSearchForm
应该被覆盖。
但是在我的情况下,只需要 url 就可以接受:
<a href="{{request.get_full_path}}cpu/?selected_facets=vendor_exact%3AAMD">
<img src="{% static 'logo/amd.jpg' %}" alt="{{ cpu_producer.title }}" />
</a>
导致 cpu 页面,并且由于 ?selected_facets=vendor_exact%3AAMD
部分自动选择 Producer facet(即本例中的 AMD)。
您可以使用 JavaScript。页面加载后获取所有 GET 参数并迭代每个复选框:
function setCheckedItems() {
var all_params = getQueryParams(); // GET params
$.each( all_params, function( key, value ) {
id = decodeURIComponent(key).replace(/\s/g,'');
$('#'+id).attr('checked', 'checked');
});
}
在下图中,您可以看到 cpu_producer == ""
时面的外观(即没有 selected)。
有些情况下 cpu_producer
可能是 AMD 或 INTEL,并且在页面加载时必须 select 编辑适当的方面的复选框。如何在后端 select 它以便在前端进行适当过滤 cpu?
if category.slug == 'cpu':
possible_sockets = '(socket_exact:"LGA1151" OR socket_exact:"LGA2066" OR socket_exact:"AM4" OR socket_exact:"TR4")'
sqs = sqs.narrow(possible_sockets)
possible_producers = '(producer_exact:"AMD" OR producer_exact:"INTEL")'
sqs = sqs.narrow(possible_producers)
cpu_producer = RECEIVED_VALUE # "AMD" or "INTEL" or ""
# I NEED SOMETHING LIKE THIS.
if cpu_producer:
sqs.PRESELECT(producer=cpu_producer)
源代码挖掘使我找到了文件 haystack/forms.py
。似乎 class FacetedSearchForm
应该被覆盖。
但是在我的情况下,只需要 url 就可以接受:
<a href="{{request.get_full_path}}cpu/?selected_facets=vendor_exact%3AAMD">
<img src="{% static 'logo/amd.jpg' %}" alt="{{ cpu_producer.title }}" />
</a>
导致 cpu 页面,并且由于 ?selected_facets=vendor_exact%3AAMD
部分自动选择 Producer facet(即本例中的 AMD)。
您可以使用 JavaScript。页面加载后获取所有 GET 参数并迭代每个复选框:
function setCheckedItems() {
var all_params = getQueryParams(); // GET params
$.each( all_params, function( key, value ) {
id = decodeURIComponent(key).replace(/\s/g,'');
$('#'+id).attr('checked', 'checked');
});
}