Почему мой submit input не работает в django?

У меня есть форма, в которой пользователь может попросить кредит, и она сообщит ему, одобрен он или нет. Проблема не в логике, а в неработающем вводе submit. Он не сохраняет форму в базе данных и не показывает мне ошибки из-за ввода submit. Может быть, что-то не так с succes_url? Я не знаю, но вот мой код:

views.py:

#don't worry about the logic part of the form, it's just to show how it´s supposed to work




class LoanRequest(LoginRequiredMixin, generic.CreateView):
    form_class = LoanForm
    success_url = reverse_lazy('Prestamos')
    template_name = 'Prestamos/template/Prestamos/prestamos.html'

    def form_valid(self, form):
        user = self.request.user
        cliente = Cliente.objects.get(user_id = user.id)
        if not cliente.approve_loan(form.cleaned_data.get('loan_total')):
            form.add_error(field=None, error='loan not approved')
            return self.form_invalid(form)
        else:
            form.instance.customer_id = cliente
            super(LoanRequest, self).form_valid(form)
            return render(self.request, 'Prestamos/template/Prestamos/prestamos.html', context={'form': form, 'success_msg': 'loan approved!'})

urls.py:

urlpatterns = [
    path('prestamos/', views.LoanRequest.as_view(), name = 'prestamos'),
]

forms.py:

class LoanForm(forms.ModelForm):
    class Meta:
        model = Prestamo #loan in English
        fields = ['loan_type', 'loan_total', 'loan_date']

и шаблон:

<div class="container">
            {%if success_msg%}
                <p class="alert alert-success">{{success_msg}}</p>
            {%endif%}
            <form action="" method="POST">
                {%csrf_token%}
                {%for field in form%}
                    <div class="form-group">    
                        <label for="{{field.label}}">{{field.label}}</label>
                        {{field}}
                    </div>
                    {%for error in field.errors%}
                      <p>{{error}}</p>
                    {%endfor%}
                {%endfor%}
                <input type="submit" value="request"></input>
            </form>
        </div>

Ну, <input> - это пустой тег, он ничего не содержит, поэтому не закрывайте его.

Дополнительно, я бы рекомендовал вам делать пробелы между тегами шаблона, например, это должно быть {% endfor %}, а не {%endfor%}.

Также удалите пустой атрибут action из формы, так как Django всегда принимает маршрут текущей страницы, если он не указан или пустая строка.

Также используйте novalidate на форме для отображения пользовательских ошибок.

Попробуйте этот шаблон:

<div class="container">
            {% if success_msg %}
                <p class="alert alert-success">{{success_msg}}</p>
            {% endif %}
            <form method="POST" novalidate>
                {% csrf_token %}
                {% for field in form %}
                    <div class="form-group">    
                        <label for="{{field.label}}">{{field.label}}</label>
                        {{field}}
                    </div>
                    {% for error in field.errors %}
                      <p>{{error}}</p>
                    {% endfor %}
                {% endfor %}
                <input type="submit" value="request">
            </form>
</div>
Вернуться на верх