feat: mixin for update forms

This commit is contained in:
2025-01-20 11:40:07 +01:00
parent e540d4cba0
commit df67125599
13 changed files with 227 additions and 120 deletions
+66
View File
@@ -0,0 +1,66 @@
from typing import Type
from django import forms
from django.db import models
from django.shortcuts import render
from django.views.generic import TemplateView
class HTMXFormComponent(TemplateView):
form_class: Type[forms.ModelForm] = None
template_name: str = "components/default/form.html"
hx_trigger = ""
view_name = ""
def get_view_name(self):
return self.view_name
def get_form_class(self) -> Type[forms.ModelForm]:
return self.form_class
def get_form(self, initial=True):
instance = self.get_object()
if initial:
return self.form_class(initial=self.get_initial_values(instance), instance=instance)
return self.form_class(self.request.POST, instance=instance)
def get_object(self) -> models.Model:
raise NotImplementedError
def get_initial_values(self, instance):
return {}
def get_context_data(self, **kwargs):
form = self.get_form()
return {
"form": form,
"url": self.get_view_name(),
}
def post(self, request, *args, **kwargs):
form = self.get_form(initial=False)
if form.is_valid():
instance = form.save()
response = render(
request,
self.template_name,
{
"form": form,
"instance": instance,
},
)
response["HX-Trigger"] = self.hx_trigger
return response
return render(
request,
self.template_name,
{
"form": form,
},
)