Невозможно сохранить модельную форму с помощью Django Crispy Forms
Я не могу сохранить свою форму, потому что полезная нагрузка не отформатирована правильно... Я использую HTMX для отображения формы в модальном окне
вот код:
forms.py
class RecipeForm(forms.ModelForm):
title = forms.CharField(
label="Titolo",
)
method = forms.CharField(
widget=forms.Textarea(),
label="Procedimento",
)
tags = CustomTagsMultipleChoice(
queryset=Tag.objects.all(),
widget=forms.CheckboxSelectMultiple,
label="Tag",
)
hero_image = forms.ImageField(
label="Immagine",
)
class Meta:
model = Recipe
fields = ["title", "method", "tags", "hero_image"]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.attrs = {
"hx-post": reverse_lazy("recipes:recipe_create"),
"hx-target": "#dialog",
}
self.fields["tags"].required = False
self.fields["method"].required = False
self.fields["hero_image"].required = False
self.fields["tags"].label = False
self.helper.layout = Layout(
FloatingField("title"),
FloatingField("method", css_class="fl-textarea"),
"hero_image",
InlineCheckboxes("tags"),
Div(
Submit("submit", "Salva"),
Submit("button", "Cancella", css_class="btn btn-danger", data_bs_dismiss="modal"),
css_class="text-end",
),
)
views.py
@login_required
def recipe_create(request):
if request.method == "POST":
form = RecipeForm(request.POST,request.FILES)
if form.is_valid():
form.save()
return HttpResponse(status=204, headers={"HX-Trigger": "recipeSaved"})
form = RecipeForm(request.POST,request.FILES)
context = {"recipe_form": form}
return render(request, "recipes/partials/_recipe_create.html", context)
form = RecipeForm()
context = {"recipe_form": form}
return render(request, "recipes/partials/_recipe_create.html", context)
_recipe_create.html
{% load crispy_forms_tags %}
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Aggiungi una ricetta</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Chiudi"></button>
</div>
<div class="modal-body">
{% crispy recipe_form %}
</div>
</div>
если я печатаю request.POST, я получаю эту плохо отформатированную полезную нагрузку
<QueryDict: {'------WebKitFormBoundaryIbg12MlAkITtzU0g\r\nContent-Disposition: form-data; name': ['"submit"\r\n\r\nSalva\r\n------WebKitFormBoundaryIbg12MlAkITtzU0g\r\nContent-Disposition: form-data; name="csrfmiddlewaretoken"\r\n\r\n0DWNbShUV0r8mFSPUNQaSQapC38FQFrMeOtmqFY64H4x3ReOuG7suKqUip7sSpqv\r\n------WebKitFormBoundaryIbg12MlAkITtzU0g\r\nContent-Disposition: form-data; name="title"\r\n\r\ntest\r\n------WebKitFormBoundaryIbg12MlAkITtzU0g\r\nContent-Disposition: form-data; name="method"\r\n\r\n\r\n------WebKitFormBoundaryIbg12MlAkITtzU0g--\r\n']}>
форма не действительна и повторно отображается с пустым полем title с ошибками, так как является обязательным полем
Есть идеи? Я создал другую форму с той же логикой, и она работает нормально. Единственная разница в том, что эта форма включает поле изображения и поэтому включает enctype="multipart/form-data"
Пожалуйста, помогите, так как я схожу с ума. спасибо
Я ожидаю, что форма будет проверена и сохранена в БД