| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- from __future__ import annotations
- from django.http import JsonResponse
- from django.views.decorators.http import require_GET
- from .utils.geo import list_countries, list_states, list_cities
- import json
- def _q(request):
- return request.GET.get('q') or request.GET.get('term') or ''
- def _forward(request, key: str):
- # Try direct param (rare) or `forward[key]`
- val = request.GET.get(key)
- if val:
- return val
- fk = request.GET.get(f'forward[{key}]')
- if fk:
- return fk
- # DAL typically sends a JSON payload in `forward`
- fjson = request.GET.get('forward')
- if fjson:
- try:
- data = json.loads(fjson)
- # Format may be dict or list of dicts
- if isinstance(data, dict):
- return data.get(key)
- if isinstance(data, list):
- for item in data:
- if isinstance(item, dict) and item.get('name') == key:
- return item.get('value')
- except Exception:
- pass
- return None
- @require_GET
- def countries_autocomplete(request):
- q = _q(request)
- results = [{"id": code, "text": name} for code, name in list_countries(q)]
- return JsonResponse({"results": results, "pagination": {"more": False}})
- @require_GET
- def states_autocomplete(request):
- q = _q(request)
- country = _forward(request, 'country')
- items = list_states(country, q)
- results = [{"id": code, "text": name} for code, name in items[:50]]
- return JsonResponse({"results": results, "pagination": {"more": False}})
- @require_GET
- def cities_autocomplete(request):
- q = _q(request)
- country = _forward(request, 'country')
- state = _forward(request, 'state')
- items = list_cities(country, state, q)
- results = [{"id": code, "text": name} for code, name in items[:50]]
- return JsonResponse({"results": results, "pagination": {"more": False}})
|