Apr 13, 202110:08 AM - edited Apr 13, 202110:10 AM
Participant
Managing Multiple Filters in HubDB
SOLVE
I might be overthinking/overlooking here, but I have 4 filters I'm using to filter my HubDB table. Country, Region, Partner Type, and Partner Tier.
It seems very excessive to create a query for every possible combination of filters a user could selected using these filters.
For example, a query for all filters selected, a query for only the Country and Region selected, a query for only the Country and Partner Type selected, a query for only the Partner Type, Country and Region selected, and so on.
Is there a concise way to handle this?
For reference, here's what I started to do and relized how excessive this could turn out.
<!-- ##############################
Query Variables
############################## -->
{% set queryparam = "" %}
<!-- ##############################
Partner Type Variables
############################## -->
{% set partnerType = request.query_dict.partner_type in ["1", "2", "3", "4"] %}
{% set showAllPartnerType = request.query_dict.partner_type == "show-all" %}
{% set partnerTypeQuery = queryparam ~ "&partner_type="~request.query_dict.partner_type|urlencode %}
<!-- ##############################
Country/Multi-Select Variables
############################## -->
{% set country = request.query_dict.partner_country in ["1", "2", "3", "4", "5"] %}
{% set showAllCountry = request.query_dict.partner_country == "show-all" %}
{% set partnerCountryQuery = queryparam ~ "&partner_country__in="~request.query_dict.partner_country|urlencode %}
<!-- ##############################
Partner Region Variables
############################## -->
{% set region = request.query_dict.partner_region in ["1", "2", "3"] %}
{% set showAllRegion = request.query_dict.partner_region == "show-all" %}
{% set partnerRegionQuery = queryparam ~ "&partner_region="~request.query_dict.partner_region|urlencode %}
<!-- ##############################
Partner Tier Variables
############################## -->
{% set tier = request.query_dict.partner_tier in ["1", "2"] %}
{% set showAllTier = request.query_dict.partner_tier == "show-all" %}
{% set partnerTierQuery = queryparam ~ "&partner_tier="~request.query_dict.partner_tier|urlencode %}
<!-- ##############################
Filter Queries
############################## -->
<!-- Partner Type Only -->
{% if partnerType %}
{% set queryparam = partnerTypeQuery %}
{% endif %}
<!-- Region Only -->
{% if region %}
{% set queryparam = partnerRegionQuery %}
{% endif %}
<!-- Tier Only -->
{% if tier %}
{% set queryparam = partnerTierQuery %}
{% endif %}
<!-- Country Only -->
{% if country %}
{% set queryparam = partnerCountryQuery %}
{% endif %}
<!-- Partner Type + Partner Region -->
{% if partnerType and region %}
{% set queryparam = queryparam ~ partnerTypeQuery~partnerRegionQuery %}
{% endif %}
<!-- Partner Type + Partner Tier -->
{% if partnerType and tier %}
{% set queryparam = queryparam ~ partnerTypeQuery~partnerTierQuery %}
{% endif %}
<!-- Partner Type + Partner Country -->
{% if partnerType and country %}
{% set queryparam = queryparam ~ partnerTypeQuery~partnerCountryQuery %}
{% endif %}
<!-- Partner Region + Partner Tier -->
{% if region and tier %}
{% set queryparam = queryparam ~ partnerRegionQuery~partnerTierQuery %}
{% endif %}
<!-- Partner Region + Partner Country -->
{% if region and country %}
{% set queryparam = queryparam ~ partnerRegionQuery~partnerCountryQuery %}
{% endif %}
<!-- Partner Tier + Partner Country -->
{% if tier and country %}
{% set queryparam = queryparam ~ partnerRegionQuery~partnerCountryQuery %}
{% endif %}
<!-- Partner Region + Partner Tier + Partner Type -->
{% if region and tier and partnerType %}
{% set queryparam = queryparam ~ partnerRegionQuery~partnerTierQuery~partnerTypeQuery %}
{% endif %}
I thought I might be able to get away with this but it doesn't retrun anything:
{% if region or tier or partnerType or country %}
{% set queryparam = queryparam ~ partnerRegionQuery~partnerTierQuery~partnerTypeQuery~partnerCountryQuery %}
{% endif %}