Migrações com o Django South

Fernando Rocha

@fernandogrd

Pug-Pe XIX

Limitações do syncdb

Limitações do syncdb

Solução? South!

Solução? South!

Criação automática de migrações:


O django south consegue ver o que foi mudado no models.py e escrever automaticamente migrações.

E é? Como funciona?

  1. pip install South
  2. Adicionar 'south' em APPS_INSTALLED
  3. Rodar o syncdb.
  4. (Demonstração)
  5. python manage.py schemamigration app_label --initial
  6. python manage.py migrate
  7. (Demonstração)
  8. Modificar model
  9. python manage.py schemamigration app_label --auto
  10. python manage.py migrate
  11. (Demonstração)

Arquivo Gerado

 1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    # encoding: utf-8
    import datetime
    from south.db import db
    from south.v2 import SchemaMigration
    from django.db import models

    class Migration(SchemaMigration):

        def forwards(self, orm):
            
            # Adding field 'Teste.novo_campo'
            db.add_column('teste_teste', 'novo_campo', self.gf('django.db.models.fields.SlugField')(default='', max_length=50, db_index=True), keep_default=False)


        def backwards(self, orm):
            
            # Deleting field 'Teste.novo_campo'
            db.delete_column('teste_teste', 'novo_campo')


        models = {
            'teste.teste': {
                'Meta': {'object_name': 'Teste'},
                'campo_1': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
                'campo_2': ('django.db.models.fields.PositiveIntegerField', [], {}),
                'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
                'novo_campo': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'})
            }
        }

        complete_apps = ['teste']
    

Mais Vantagens

Mais Vantagens

DataMigrations

  1. python manage.py datamigration app_label nome_da_migração
  2. Editar arquivo de migração para adicionar lógica.
  3. (Demonstração)

Convertendo Apps

  1. python manage.py convert_to_south app_label

O South é uma mão na roda..

Gigante!

Ao iniciar um projeto django..

pip install Django South

Referências

/

#