如何使用 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');
    });
}