39 lines
910 B
Python
39 lines
910 B
Python
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)
|