Receptes de South
Pels aquelles que encara no el coneixeu, permeteu-me que us presenti south una eina per a controlar els canvis que es van fent al model i poder-los aplicar a la nostra base de dades.
South és una eina fantàstica, però no substitueix ni la necessitat de fer còpies de seguretat abans de fer algun canvi que pugui significar la destrucció o alteració de dades, ni la necessària coordinació entre els diferents membres de l'equip de desenvolupament.
Al tutorial des south està molt bén explicat tot, així que aquest apunt miraré de posar les receptes que he trobat més interessants, bàsicament per a no oblidar-me'n.
Canvi de nom d'un camp
South intentarà esborrar el camp i crear-ne un de nou. No sap que el que volíeu era un canvi de nom així que:
- Fem la migració de la manera habitual
python manage.py schemamigration app --auto
South generarà una nova migració. Amb el vostre editor preferit, editau-la i eleminau les referències a l'eliminació i creació del camp. En el seu lloc, utilitzau directament l'API de South, per escriure
db.rename_column(table_name, column_name, new_column_name)
amb les columnes en sentit contrari per desfer la migració, obviament...
Hem modificat un camp a la BD directament
Les primeres vegades que es fa servir South costa que tot l'equip s'hi acostumi. Si la gent estava acostuamada a passar scripts sql, potser els ha passat i no ha fet ús de la migració.
South detectarà que la migració no està passada i intentarà passar-la, però com que els canvis ja hi són (la taula que es vol crear ja existeix, o el camp, ...), South donarà un error i intentarà tirar la migració enrera. En el cas de Postgres no hi haurà problemes, però amb bases de dades com el MySQL que no suporten la transaccionalitat d'esquemes donarà error.
No passa res si detectau que és això el que ha passat. Però hem de dir-li a South que consideri que la migració ja està feta. Per axixò farem:
python manage.py migrate app --fake
suposant que és la darrera migracío, o bé especificant quina migració s'ha de considerar aplicacada.
python mangae.py migrate app num_migració --fake
Ja tenim la base de dades i volem començar a fer feina amb South
Per a convertir una aplicació de la qual ja teniu la base de dades creada hem de fer
python manage.py convert_to_south app
això posarà l'aplicació sota el control de south, crearà la migració inicial i la marcarà com a aplicada.