summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2026-05-06 17:12:31 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2026-05-06 17:26:01 +0200
commit8c534e377ebc3c79e06fa782e8846139043b4d64 (patch)
treed37960a6317ee75336c1f93bfce668af2bf0fa49 /ishtar_common
parent64d8d9579a367309e95b752091d70e13ee08e651 (diff)
downloadIshtar-8c534e377ebc3c79e06fa782e8846139043b4d64.tar.bz2
Ishtar-8c534e377ebc3c79e06fa782e8846139043b4d64.zip
✨ find criteria search - warehouse town of find's containers
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/forms_common.py7
-rw-r--r--ishtar_common/urls.py2
-rw-r--r--ishtar_common/views.py39
3 files changed, 29 insertions, 19 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index d0b1183be..3243214b5 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -95,7 +95,7 @@ from archaeological_finds.models import Find, FindBasket, Treatment, TreatmentFi
from archaeological_warehouse.models import Container, Warehouse
-def get_town_field(label=_("Town"), required=True):
+def get_town_field(label=_("Town"), simple=False, required=True):
help_text = _(
"<p>Type name, department code of the "
"town you would like to select. The search is insensitive to case."
@@ -106,10 +106,9 @@ def get_town_field(label=_("Town"), required=True):
"department.</p>"
)
# !FIXME hard_link, reverse_lazy doen't seem to work with formsets
+ url = "/autocomplete-simple-town" if simple else "/autocomplete-town"
return forms.IntegerField(
- widget=widgets.JQueryAutoComplete(
- "/" + settings.URL_PATH + "autocomplete-town", associated_model=models.Town
- ),
+ widget=widgets.JQueryAutoComplete(url, associated_model=models.Town),
validators=[models.valid_id(models.Town)],
label=label,
help_text=mark_safe(help_text),
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py
index 5481ff25a..827e85a7a 100644
--- a/ishtar_common/urls.py
+++ b/ishtar_common/urls.py
@@ -565,6 +565,8 @@ urlpatterns += [
name="show-town",
),
re_path(r"autocomplete-town/?$", views.autocomplete_town, name="autocomplete-town"),
+ re_path(r"autocomplete-simple-town/?$", views.autocomplete_simple_town,
+ name="autocomplete-simple-town"),
re_path(
r"autocomplete-advanced-town/(?P<department_id>[0-9]+[ABab]?)?$",
views.autocomplete_advanced_town,
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index e219e5633..965c9b0d1 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -1046,21 +1046,30 @@ def autocomplete_department(request):
return HttpResponse(data, content_type="text/plain")
-def autocomplete_town(request):
- if not request.GET.get("term"):
- return HttpResponse(content_type="text/plain")
- q = request.GET.get("term")
- q = unicodedata.normalize("NFKD", q).encode("ascii", "ignore").decode()
- query = Q()
- for q in q.split(" "):
- extra = Q(name__unaccent__icontains=q)
- if settings.COUNTRY == "fr":
- extra |= Q(numero_insee__istartswith=q)
- query &= extra
- limit = 20
- towns = models.Town.objects.filter(query).distinct()[:limit]
- data = json.dumps([{"id": town.pk, "value": str(town)} for town in towns])
- return HttpResponse(data, content_type="text/plain")
+def get_autocomplete_town(cached_label=True):
+ def func(request):
+ if not request.GET.get("term"):
+ return HttpResponse(content_type="text/plain")
+ q = request.GET.get("term")
+ q = unicodedata.normalize("NFKD", q).encode("ascii", "ignore").decode()
+ query = Q()
+ for q in q.split(" "):
+ extra = Q(name__unaccent__icontains=q)
+ if settings.COUNTRY == "fr":
+ extra |= Q(numero_insee__istartswith=q)
+ query &= extra
+ limit = 20
+ towns = models.Town.objects.filter(query).distinct()[:limit]
+
+ attr = "cached_label" if cached_label else "name"
+ data = json.dumps([{"id": town.pk, "value": getattr(town, attr)}
+ for town in towns])
+ return HttpResponse(data, content_type="text/plain")
+ return func
+
+
+autocomplete_town = get_autocomplete_town()
+autocomplete_simple_town = get_autocomplete_town(cached_label=False)
def autocomplete_advanced_town(request, department_id=None, state_id=None):