【问题标题】:How to pre-select facets (i.e. get selected checkbox on page load) using Django-Haystack?如何使用 Django-Haystack 预先选择构面(即在页面加载时选中复选框)?
【发布时间】:2019-02-16 18:37:06
【问题描述】:

在下图中,您可以看到cpu_producer == "" 时的构面外观(即未选择任何内容)。

在某些情况下,cpu_producer 可能是 AMD 或 INTEL,并且在页面加载时必须选中相应的构面复选框。如何在后端选择它以进入前端适当过滤的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)

【问题讨论】:

    标签: django python-3.x django-haystack faceted-search django-oscar


    【解决方案1】:

    源代码挖掘将我带到了文件haystack/forms.py。似乎应该重写 FacetedSearchForm 类。

    但是在我的情况下,只有这样的网址是可以接受的:

    <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)。

    【讨论】:

      【解决方案2】:

      您可以使用 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');
          });
      }
      

      【讨论】:

        猜你喜欢
        • 2014-02-22
        • 2023-04-01
        • 2020-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-21
        • 2018-07-16
        相关资源
        最近更新 更多