urls httpresponseredirect examples example bootstrap django django-forms

examples - httpresponseredirect django example



Django: agregar non_field_error desde la vista? (3)

Agregando a la respuesta de Daniel, la sintaxis específica es:

form.errors[''__all__''] = form.error_class(["error msg"])

Tenga en cuenta que puede sustituir ''__all__'' con la constante NON_FIELD_ERRORS para una mejor compatibilidad ( crédito).

from django.forms.forms import NON_FIELD_ERRORS

Tengo un formulario Django con un montón de campos que estoy representando en la plantilla. También tengo algunos elementos de entrada de HTML directos que quiero validar en la vista accediendo a las vars request.POST . Si no se validan, quiero inyectar un error en el formulario de Django para poder mostrarlo en la página. ¿Hay una manera de hacerlo?


Bueno, puede insertar cualquier cosa en el diccionario de errors del formulario, y los errores que no son de campo se errors[''__all__''] en errors[''__all__''] .

Pero, ¿por qué mantienes algunos campos fuera del formulario de Django, solo para volver a colocar sus errores al final? ¿Por qué no poner todos los campos en el formulario en primer lugar? Si es solo que está utilizando un formulario modelo y desea agregarle campos, puede hacerlo en Django simplemente declarando los campos en el nivel del formulario, luego puede definir métodos limpios para ellos dentro del formulario.

class ExtendedModelForm(forms.ModelForm): extra_field_1 = forms.CharField() extra_field_2 = forms.CharField() def clean_extra_field_1(self): ...etc...


También puedes usar el método add_error() bastante elegante. Trabaja para Django> = 1.7.

Si configura el field como None , el error se tratará como "non_field". Asi que:

form.add_error(None, "I''m non-field error")

Funciona de maravilla.