En mi aplicación django, este es mi validator.py
from django.core.exceptions import ValidationError from django.core.validators import URLValidator def validate_url(value): url_validator = URLValidator() url_invalid = False try: url_validator(value) except: url_invalid = True try: value = "http://"+value url_validator(value) url_invalid = False except: url_invalid = True if url_invalid: raise ValidationError("Invalid Data for this field") return valueque se utiliza para validar esto:
from django import forms from .validators import validate_url class SubmitUrlForm(forms.Form): url = forms.CharField(label="Submit URL",validators=[validate_url]) Cuando ingreso una URL como google.co.in e imprimo el valor justo antes de devolverlo desde validate_url, imprime http://google.co.in pero cuando intento obtener los cleaned_data['url'] en mis vistas, todavía muestra google.co.in . Entonces, ¿dónde va el valor devuelto por mi validador y necesito editar explícitamente las funciones clean () para cambiar el valor del campo de URL?
El documento dice lo siguiente:
El método clean() en una subclase de campo es responsable de ejecutar to_python(), validate() y run_validators() en el orden correcto y propagar sus errores. Si, en cualquier momento, alguno de los métodos genera ValidationError, la validación se detiene y se genera ese error. Este método devuelve los datos limpios, que luego se insertan en el diccionario clean_data del formulario.
Todavía no estoy seguro de dónde va el valor de retorno del validador y si es posible cambiar el dictado de datos limpios usando el validador.
De los documentos :
Un validador es simplemente un objeto o función invocable que toma un valor y simplemente no devuelve nada si el valor es válido o genera un error de validación si no lo es.
El valor devuelto simplemente se ignora.
Si desea poder modificar el valor, puede usar el campo clean_ en los formularios como se describe aquí :
class SubmitUrlForm(forms.Form): url = ... def clean_url(self): value = self.cleaned_data['url'] ... return updated_valueLos validadores solo sirven para validar los datos, por lo que se ignora el valor de retorno del validador.
Está buscando "limpieza" de datos (transformándolos en una forma común). En Django, los formularios son responsables de la limpieza de datos.