Django CBV ModelForm hx-post не работает с HTMX

У меня есть частичная форма, отображаемая с помощью HTMX на моей странице upload.html:

{% extends 'base.html' %}
<p>Veuillez choisir ci-dessous entre l'upload d'un fichier de commandes ou l'upload d'un fichier fournisseur :</p>
<h2>Upload fichier <u>transporteur</u></h2>

    <button hx-get="{% url 'tool:upload-form' %}" hx-swap="afterend" hxtarget="#transporterforms">Add transporter</button>
    <div class="transporterforms">


    </div>

{% block content %}

А мой upload-form.html:

<div hx-target="this" hx-swap="outerHTML">
    <form method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form }}
        <button type="submit" hx-post=".">Submit</button>
    </form>
</form>
</div>

Вот как я управляю своей формой в views.py:

class TransporterFileFormPartialView(FormView):
    form_class = TransporterFileForm
    template_name = 'tool/upload-form.html'
    success_url = '.'


    def form_valid(self, form):
        transporter_file = TransporterFile.objects.create(
            file=form.cleaned_data['file'],
            transporter=form.cleaned_data['transporter']
        )
        transporter_file_pk = transporter_file.pk

        return super().form_valid(form)


class CompareFormView(CustomLoginRequiredMixin, RequestFormMixin, TemplateView):
    """ View to show results of comparison between two files. """

    template_name = 'tool/upload.html'
    # success_url = '.'


    def post(self, *args, **kwargs):

        form = TransporterFileForm(self.request.POST)

        if form.is_valid():
            obj = form.save(commit=False)
            # transporter_file = get_object_or_404(TransporterFile, pk=form.pk)
            obj.save()
            transporter_file = TransporterFile.objects.get(pk=obj.pk)
            transporter_file_pk = transporter_file.pk

            return redirect(reverse_lazy('tool:upload'))

И в моем forms.py:

class TransporterFileForm(forms.ModelForm):
    class Meta:
        model = TransporterFile
        fields = ('file', 'transporter')

Мои urls.py следующие:

urlpatterns = [
    path('', TemplateView.as_view(template_name="tool/home.html"), name="home"),
    path('upload-form/', TransporterFileFormPartialView.as_view(), name="upload-form"),
    path('upload-detail/<int:pk>', TransporterFileFormDetailView.as_view(), name="upload-detail"),
    path('upload-detail/<int:pk>/delete/', TransporterFileFormDeleteView.as_view(), name="upload-delete"),
    path('report/add-report', UserAddReportView.as_view(), name='add-report'),
    path('report/add-report/2', CompareFormView.as_view(), name='upload'),
    path('reports/', UserReportsView.as_view(), name='reports'),
]

Моя основная проблема связана с upload-form.html. Когда я пытаюсь

<button type="submit" hx-post=".">Submit</button>

Не работает. У меня следующее сообщение:

[19/May/2022 15:00:05] "GET /upload-form/ HTTP/1.1" 200 896
Not Found: /report/add-report/

Но когда я пробую без hx-post, он работает

<button type="submit">Submit</button>

Я не могу понять почему?

Как показывает сообщение об ошибке, путь /report/add-report/ с косой чертой не существует, поскольку вы определили его без косой черты: path('report/add-report', UserAddReportView.as_view(), name='add-report'),. Поэтому вы можете просто добавить недостающую косую черту или использовать функцию url в шаблоне, чтобы получить правильный путь конечной точки:

<button type="submit" hx-post="{% url 'tool:add-report' %}">Submit</button>
Вернуться на верх