Pregunta

Antes de hoy, He estado usando Django 1.1. Para asegurar que estoy mantenerse al día con los tiempos, decidí actualizar mi entorno Django usar Django 1.2.3. Por desgracia, me he encontrado con un problema.

El siguiente código no plantear una ValueError en 1.1:

        instance = FormClass(
            request.POST,
            instance=existing_instance
        ).save(commit=False)

Sin embargo, ahora que he actualizado, se plantea una ValueError cada vez. Tengo un campo SSN que estoy presentando como parte de mi forma y me tira a cabo los guiones antes de hacer una () llamada instance.save. Por desgracia, la ValueError se debe a que Django cree que mi valor SSN es demasiado largo (que está esperando 9 caracteres y que está recibiendo 11 - 123-45-6789)

.

He mirado a través de la documentación de Django y no pude encontrar nada relacionado con este cambio. ¿Tienes idea de lo que está pasando? Siempre he pensado que la finalidad del parámetro "comprometerse = False" era permitir pre-tratamiento de los datos antes de guardar la información.

Me estoy perdiendo algo?

¿Fue útil?

Solución

Según los 1.2 Docs del save() método , "Si llama a save () con cometer = False, se devolverá un objeto que aún no se ha guardado en la base de datos." Así que no estoy seguro de por qué no habría habido un cambio en la funcionalidad, pero es posible que en 1.1 validación / código de comprobación corrió sólo cuando un objeto se guarda en la base de datos, y en el punto 1.2 que ocurre antes (antes de que el objeto se guarda) .

En cualquier caso, si estás de datos de limpieza que se está entrando en una forma, probablemente debería ser la limpieza en el FormClass:

def clean_ssn(self):
    data = re.sub(r'[^0-9]','',self.cleaned_data['ssn'])
    #validation code here
    return data

Eso, al menos, debería solucionar el problema ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top