[pyar] South non me reconoce un cambio

Ramiro Morales cramm0 en gmail.com
Jue Abr 12 15:56:27 ART 2012


2012/4/12 Sebastian Bassi <sebastian.bassi en globant.com>:
> 2012/4/12 Fabian Ezequiel Gallina <galli.87 en gmail.com>
>>
>> (porque --auto no hace lo que querés) *tenes* que cambiar el modelo a
>> mano vos para que el mismo y la migración que aplicaste estén en
>> sincronía.
>>
>
> Entonces era eso!!! Ahora lo pruebo, en un momento lo pensé pero dije que no
> podia ser tan trucho (no quiero ofender a nadie pero es lo que me parece,
> despues de usar web2py Django me parece un poco tosco).

Ya me perdí,

En el primer post de este hilo escribiste:

    El cambio es de este tipo:

    papers = models.CharField(_('papers'), max_length=255, null=True,
blank=True)

   a

    papers = models.CharField(_('papers'), max_length=2048, null=True,
blank=True)

¿Cómo llegaste a la conclusión de que a pesar de que en tu models todavía
tenías max_length=255. el código/Django/Python/etc. iban a adivinar
que vos querias
que ese valor fuera 2048?

Es tosco pero responde a una filosofía: La unica forma posta posta de
la información
del esquema del la BD es lo que hay en models.py

Eso está aclarado en paso 1 del tutorial Django:

  https://docs.djangoproject.com/en/1.4/intro/tutorial01/

  "Philosophy

  A model is the single, definitive source of data about your data. It
contains the essential fields and behaviors of the data you're
storing. Django   follows the DRY Principle. The goal is to define
your data model in one place and automatically derive things from it.

Y lo mas importante, es robusto:

Lo que South provee es migraciones para la BD. Si el día de mañana vos
no tenes datos en la BD que quieras preservar y evolucionar en
conjunto con el schema de la DB o no querés conocer la historia
evolutiva de la BD
(que son los dos usos tradicionales que llevan a usar una solución
como South)...
podés borrar tranquilamente  el directorio migrations/, desinstalar
South y eliminar
las tablas correspondientes a la aplicación en la BD.

Luego de eso, al hacer un syncdb tradicional el schema de la BD que vas
a obtener es el mismo que obtendrías si hubieses aplicado todas la secuencia
de N migraciones porque se corresponde 100% con lo que tenes en tu models.py

No hay magia ni almacenamiento de esa información tan crítica
en otros lugares que no sea en el models.py. Por ejemplo, si se guardara
de alguna manera en la BD.. podría presentarse un problema al acceder a la misma
y seria como serruchar la rama del árbol en la que estamos encaramados.
Nos quedamos a pata.

Otra premisa: Django no toca tu models.py ni tu BD, nunca. Y si alguna vez
llega a tocar tu BD (si South o similar se incorpora a Django) va a ser en base
a lo que vos le dictes con tus modificaciones en models.py.

Suerte,

-- 
Ramiro Morales



More information about the pyar mailing list