From 7f3bd159cb60e0f77a5d5a51209472296f3e4d01 Mon Sep 17 00:00:00 2001 From: Tobias Kunze Date: Thu, 20 Mar 2025 12:05:22 +0100 Subject: [PATCH] Make HTMX integration more flexible --- src/servala/frontend/forms/mixins.py | 9 +++++++-- src/servala/frontend/templates/frontend/profile.html | 4 ++-- src/servala/frontend/views/mixins.py | 7 +++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/servala/frontend/forms/mixins.py b/src/servala/frontend/forms/mixins.py index 4ca1796..7fe6663 100644 --- a/src/servala/frontend/forms/mixins.py +++ b/src/servala/frontend/forms/mixins.py @@ -1,3 +1,5 @@ +from django.utils.functional import cached_property + from servala.frontend.forms.renderers import InlineFormRenderer @@ -7,8 +9,6 @@ class HtmxMixin: Useful when sending single fields with htmx. """ - default_renderer = InlineFormRenderer - def __init__(self, *args, **kwargs): self.single_field = kwargs.pop("single_field", None) @@ -18,3 +18,8 @@ class HtmxMixin: field = self.fields[self.single_field] self.fields.clear() self.fields[self.single_field] = field + + @cached_property + def default_renderer(self): + if self.single_field: + return InlineFormRenderer diff --git a/src/servala/frontend/templates/frontend/profile.html b/src/servala/frontend/templates/frontend/profile.html index cfad0e9..2d6433a 100644 --- a/src/servala/frontend/templates/frontend/profile.html +++ b/src/servala/frontend/templates/frontend/profile.html @@ -15,7 +15,7 @@ {{ request.user.email }} @@ -24,7 +24,7 @@ {{ request.user.company|default:"–" }} diff --git a/src/servala/frontend/views/mixins.py b/src/servala/frontend/views/mixins.py index 3184e86..6ab8f0f 100644 --- a/src/servala/frontend/views/mixins.py +++ b/src/servala/frontend/views/mixins.py @@ -25,8 +25,11 @@ class HtmxMixin(TemplateView): def get_form_kwargs(self): result = super().get_form_kwargs() - if self.is_htmx and (field_name := self.request.POST.get("hx-single-field")): - result["single_field"] = field_name + if self.is_htmx: + data = ( + self.request.POST if self.request.method == "POST" else self.request.GET + ) + result["single_field"] = data.get("hx-single-field") return result def form_valid(self, form):