Mostrando entradas con la etiqueta south. Mostrar todas las entradas
Mostrando entradas con la etiqueta south. Mostrar todas las entradas

lunes, 26 de julio de 2010

Nota: Añadiendo south a un projecto existente de django

Hace poco tiempo, miré por encima como funcionaba south, pero no lo había usado hasta ahora. Simplemente había traducido y resumido el tutorial oficial para hacer un mini tutorial, pero sin incluirlo en ningún proyecto.

Ahora se ha añadido al proyecto sobre el que estoy trabajando el módulo south y por lo tanto tenía que añadir las migraciones correspondientes a la base de datos de mi ordenador de desarrollo.

No he sido capaz de añadir south sin borrar los datos que había previamente en las tablas. Me imagino que se podrá, pero como no me ha salido a la primera y los datos que tenía, eran de prueba, simplemente me he cargado las tablas de la base de datos.

El orden que he seguido es el siguiente:

Borrar las tablas de la base de datos se las aplicaciones que vaya a gestionar South.

Eliminar las aplicaciones de INSTALLED_APPS.

Sincronizar la base de datos.

Añadimos de nuevo las aplicaciones a INSTALLED_APPS.

Creamos la primera migración de las aplicaciones que vaya a gestionar South.

python manage.py schemamigration app_name –-initial

Donde app_name es el nombre de la aplicación que gestiona South. Hay que repetir este proceso para cada aplicación que gestionemos con South.

Ahora aplicamos la migración.

python manage.py migrate app_name

A partir de este momento, cada vez que se realice un cambio en los modelos, es necesario crear una nueva migración con:

manage.py schemamigration app_name –-auto


Para aplicar los cambios realizados hay que volver a usar:


python manage.py migrate app_name

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.