phase5: add saved searches, watchlist, and authenticated htmx flows

This commit is contained in:
Alfredo Di Stasio
2026-03-10 10:58:39 +01:00
parent c83bc96b6c
commit f207ffbad8
18 changed files with 543 additions and 6 deletions

View File

@ -0,0 +1,38 @@
from decimal import Decimal
from urllib.parse import urlencode
from apps.players.forms import PlayerSearchForm
IGNORED_QUERY_KEYS = {"page", "csrfmiddlewaretoken"}
def _serialize_value(value):
if value is None:
return None
if hasattr(value, "pk"):
return value.pk
if isinstance(value, Decimal):
return str(value)
return value
def extract_filters_from_params(params):
payload = params.copy()
for key in IGNORED_QUERY_KEYS:
payload.pop(key, None)
form = PlayerSearchForm(payload)
if not form.is_valid():
return {}
result = {}
for key, value in form.cleaned_data.items():
serialized = _serialize_value(value)
if serialized in (None, ""):
continue
result[key] = serialized
return result
def saved_search_to_querystring(filters: dict) -> str:
return urlencode(filters, doseq=True)