martes, 1 de junio de 2010

Notas: Mini tutorial Django South

South permite hacer migraciones de aplicaciones Django. El principal objetivo de este mini tutorial, es mostrar como south nos proporciona una capa que nos permite cambiar los modelos en las aplicaciones django y mantener la informanción introducida anteriormente.

Página oficial del módulo:
http://south.aeracode.org/


Para instalar el módulo, yo lo he hecho, a través de easy_install.

Si no tienes instalado la herramienta de instalción, se instala con:

sudo apt-get install python-setuptools

y para instalar el módulo de south:

sudo easy_install South


Este mini tutorial, está basado en el tutorial oficial que se puede encontrar en la página de South. Es muy importante seguir el orden en que se sincroniza la base de datos. Si no se hace en el orden correcto, pueden aparecer errores.

http://south.aeracode.org/docs/tutorial/index.html


Creamos un proyecto nuevo:

django-admin startproject demosouth


Ahora, hay que configurar la base de datos que va a usar django. Yo he usado sqlite, ya que para estos ejemplos sencillos, me parece la opción más simple. (Ver como hacerlo aquí). También incluimos la applicacion 'south' en INSTALLED_APPS. He comentado el resto de aplicaciones que vienen por defecto.


A continuación se sincroniza la base de datos.

./manage.py syncdb

Ahorar creamos una aplicación sobre la que trabajar.


./manage.py startapp southtut

Editamos el fichero southtut/models.py y añadimos la siguiente clase:


class Knight(models.Model):
    name = models.CharField(max_length=100)
    of_the_round_table = models.BooleanField()



Añadimos la aplicación southtut a INSTALLES_APPS. Ahora no sincronizamos la base de datos, en vez de eso, creamos una migración,

./manage.py schemamigration southtut –-initial

y la aplicamos.

./manage.py migrate southtut

Al aplicar la migración, se ha generado la tabla correspondiente.


Para ver como no afecta los cambios en modelos de django en la la información introducida con anterioridad, es necesario que las tablas de la base de datos contengan información. Se puede hacer mediante "./manage.py shell" o directamente en la base de datos. Al haber usado sqlite, se puede usar la herramienta sqlitemanager para introducir datos en la tabla.

A continuación se va a modificar el modelo. El principal objetivo de este tutorial, es aprender a modificar un modelo de django y que los datos que estaban almacenados con anterioridad, no se pierdan. Editamos southtut/models.py.

class Knight(models.Model):
    name = models.CharField(max_length=100)
    of_the_round_table = models.BooleanField()
    dances_whenever_able = models.BooleanField()


Ahora creamos una migración nueva. Esta migración contiene las modificaciones que se han hecho en los modelos, pero todavía no se han visto reflejadas en las tablas de la base de datos.

./manage.py schemamigration southtut –-auto

y la aplicamos

./manage.py migrate southtut

Al aplicar la migración, la tabla referente al modelo que se ha cambiado reflejará dichos cambios. Si ahora comprobamos los valores de la base de datos, mediante sqlitemanager en nuestro ejemplo, vemos que se mantienen los datos que hemos introducido anteriormente, pero se ha añadido una nueva columna a la tabla.

1 comentario:

  1. he añadido un nuevo post relacionado con este:


    http://pablogplanet.blogspot.com/2010/07/nota-anadiendo-south-un-projecto.html

    ResponderEliminar