Browse Source

Add ForeignKey legacy migration and some models

pull/6/head
Marcio Mazza 10 years ago
parent
commit
8b0e69eaa2
  1. 37
      legacy/legacy_migration.py
  2. 16
      parlamentares/models.py

37
legacy/legacy_migration.py

@ -1,20 +1,39 @@
from django.db import connection from django.db import connection
from django.db import models
import legacy import legacy
from parlamentares.models import NivelInstrucao from parlamentares.models import (
Legislatura, SessaoLegislativa, NivelInstrucao)
mappings = ( mappings = (
(NivelInstrucao, (Legislatura, 'num_legislatura', [
'cod_nivel_instrucao', ('dat_inicio', 'data_inicio'),
[('des_nivel_instrucao', 'nivel_instrucao')]), ('dat_fim', 'data_fim'),
('dat_eleicao', 'data_eleicao'), ]
),
(SessaoLegislativa, 'cod_sessao_leg', [
('num_legislatura', 'legislatura'),
('num_sessao_leg', 'numero'),
('tip_sessao_leg', 'tipo'),
('dat_inicio', 'data_inicio'),
('dat_fim', 'data_fim'),
('dat_inicio_intervalo', 'data_inicio_intervalo'),
('dat_fim_intervalo', 'data_fim_intervalo'), ]
),
(NivelInstrucao, 'cod_nivel_instrucao', [
('des_nivel_instrucao', 'nivel_instrucao')]
),
) )
def run_legacy_migration(): def migrate():
for model, pk, field_pairs in mappings: for model, pk, field_pairs in mappings:
print 'Migrating %s...' % model.__name__
# clear all model entries # clear all model entries
model.objects.all().delete() model.objects.all().delete()
# resets id sequence # resets id sequence
@ -28,9 +47,15 @@ def run_legacy_migration():
new = model() new = model()
while not new.id: while not new.id:
for old_field, new_field in field_pairs: for old_field, new_field in field_pairs:
setattr(new, new_field, getattr(old, old_field)) value = getattr(old, old_field)
# check for a relation
model_field = model._meta.get_field(new_field)
if isinstance(model_field, models.ForeignKey):
value = model_field.related_model.objects.get(id=value)
setattr(new, new_field, value)
new.save() new.save()
assert new.id <= old_id, 'New id exceeds old one. Be sure your new table was just created!' assert new.id <= old_id, 'New id exceeds old one. Be sure your new table was just created!'
if new.id < old_id: if new.id < old_id:
new.delete() new.delete()
new = model() new = model()

16
parlamentares/models.py

@ -1,5 +1,21 @@
from django.db import models from django.db import models
class Legislatura(models.Model):
data_inicio = models.DateField()
data_fim = models.DateField()
data_eleicao = models.DateField()
class SessaoLegislativa(models.Model):
legislatura = models.ForeignKey(Legislatura)
numero = models.IntegerField()
tipo = models.CharField(max_length=1)
data_inicio = models.DateField()
data_fim = models.DateField()
data_inicio_intervalo = models.DateField(blank=True, null=True)
data_fim_intervalo = models.DateField(blank=True, null=True)
class NivelInstrucao(models.Model): class NivelInstrucao(models.Model):
nivel_instrucao = models.CharField(max_length=50) nivel_instrucao = models.CharField(max_length=50)

Loading…
Cancel
Save