En mi plantilla tengo:

{% if form.non_field_errors %}
<div class="alert alert-info" role="alert">
  {% if "already exists" in form.non_field_errors %}
    You've already submitted your request once. Please wait for confirmation, or email us at support@relsoft.in
  {% else %}
    {{ form.non_field_errors }}
  {% endif %}
</div>
{% endif %}

Parece que el bloque {% if "already exists" in form.non_field_errors %} no funciona. Obtengo lo siguiente en la salida:

<div class="alert alert-info" role="alert">      
  <ul class="errorlist nonfield"><li>Pendingclinics with this Name, Mobile and Email already exists.</li></ul>   
</div>
1
Joel G Mathew 16 oct. 2018 a las 07:49

2 respuestas

La mejor respuesta

Antes de entrar en esta respuesta, tenga en cuenta el comentario de @DanielRoseman anterior: este es realmente el enfoque incorrecto. Debe definir un método clean () personalizado en su formulario y generar allí su error específico.

Entonces, aunque el código a continuación responde a su pregunta, ¡NO es la mejor práctica!

form.non_field_errors es una lista. Cuando tu dices

if s in form.non_field_errors

Esto significa que está comprobando si form.non_field_errors contiene un elemento exactamente igual as. Este no es el caso en su código. Su form.non_field_errors contiene un elemento (una cadena) que en sí mismo contiene la subcadena "ya existe".

Desea repasar los errores y verificar si uno de ellos contiene esta subcadena. Esto me parece al tipo de lógica que quieres hacer en la vista, no en la plantilla. Por ejemplo, en la vista:

was_submitted_before = any(["already exists" in s for s in form.non_field_errors])

Luego puede pasar la variable was_submitted_before a su plantilla, y en la plantilla puede probar si esto es cierto.

3
rje 17 oct. 2018 a las 13:43

form.non_field_errors es una lista de cadenas, no una sola cadena.

Entonces estás preguntando si 'already exists' está en ['Pendingclinics with this Name, Mobile and Email already exists.'], que es false.

Tendrá que hacer algo un poco más complejo para comprobar si existe ese error en particular, me temo.

1
Dave 16 oct. 2018 a las 04:54