Make HTMX integration more flexible
This commit is contained in:
parent
8a98f1ac33
commit
7f3bd159cb
3 changed files with 14 additions and 6 deletions
|
@ -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
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<td>
|
||||
{{ request.user.email }}
|
||||
<button class="btn btn-primary"
|
||||
hx-get="{% url 'frontend:profile' %}?fragment=user-email-edit"
|
||||
hx-get="{% url 'frontend:profile' %}?fragment=user-email-edit&hx-single-field=email"
|
||||
hx-target="closest td"
|
||||
hx-swap="outerHTML">{% translate "Edit" %}</button>
|
||||
</td>
|
||||
|
@ -24,7 +24,7 @@
|
|||
<td>
|
||||
{{ request.user.company|default:"–" }}
|
||||
<button class="btn btn-primary"
|
||||
hx-get="{% url 'frontend:profile' %}?fragment=user-company-edit"
|
||||
hx-get="{% url 'frontend:profile' %}?fragment=user-company-edit&hx-single-field=company"
|
||||
hx-target="closest td"
|
||||
hx-swap="outerHTML">{% translate "Edit" %}</button>
|
||||
</td>
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue