tipos personalizados partir modelos formularios form fields example avanzados django django-forms

personalizados - Formularios Django: si no es válido, muestre el formulario con un mensaje de error



modelform django (4)

En los formularios de Django, puede verificar si el formulario es válido:

if form.is_valid(): return HttpResponseRedirect(''/thanks/'')

¿Pero me falta qué hacer si no es válido? ¿Cómo devuelvo el formulario con los mensajes de error? No veo el "otro" en ninguno de los ejemplos.


Puede poner simplemente una variable de bandera, en este caso es_successed .

def preorder_view(request, pk, template_name=''preorders/preorder_form.html''): is_successed=0 formset = PreorderHasProductsForm(request.POST) client= get_object_or_404(Client, pk=pk) if request.method==''POST'': #populate the form with data from the request # formset = PreorderHasProductsForm(request.POST) if formset.is_valid(): is_successed=1 preorder_date=formset.cleaned_data[''preorder_date''] product=formset.cleaned_data[''preorder_has_products''] return render(request, template_name, {''preorder_date'':preorder_date,''product'':product,''is_successed'':is_successed,''formset'':formset}) return render(request, template_name, {''object'':client,''formset'':formset})

Después, en su plantilla, puede poner el código a continuación.

{%if is_successed == 1 %} <h1>{{preorder_date}}</h1> <h2> {{product}}</h2> {%endif %}


Si muestra la misma vista cuando el formulario no es válido, en la plantilla puede acceder a los errores de formulario utilizando form.errors .

{% if form.errors %} {% for field in form %} {% for error in field.errors %} <div class="alert alert-danger"> <strong>{{ error|escape }}</strong> </div> {% endfor %} {% endfor %} {% for error in form.non_field_errors %} <div class="alert alert-danger"> <strong>{{ error|escape }}</strong> </div> {% endfor %} {% endif %}

Un ejemplo:

def myView(request): form = myForm(request.POST or None, request.FILES or None) if request.method == ''POST'': if form.is_valid(): return HttpResponseRedirect(''/thanks/'') return render_to_response(''my_template.html'', {''form'': form})


vistas.py

from django.contrib import messages def view_name(request): if request.method == ''POST'': form = form_class(request.POST) if form.is_valid(): return HttpResponseRedirect(''/thanks''/) else: messages.error(request, "Error") return render(request, ''page.html'', {''form'':form_class()})

Si desea mostrar los errores del formulario que no sean válidos, simplemente coloque {{form.as_p}} como lo que hice a continuación

page.html

<html> <head> <script> {% if messages %} {% for message in messages %} alert(message); {% endfor %} {% endif %} </script> </head> <body> {{form.as_p}} </body> </html>


def some_view(request): if request.method == ''POST'': form = SomeForm(request.POST) if form.is_valid(): return HttpResponseRedirect(''/thanks''/) else: form = SomeForm() return render(request, ''some_form.html'', {''form'': form})