Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como mesclar dois modelos django (tabelas) em um modelo (tabela)


Uma migração personalizada deve funcionar.
  1. Você já tem os modelos A e B, então crie o modelo C com os campos desejados dos dois modelos.
  2. Faça uma migração de esquema normal, por exemplo manage.py makemigrations ... e solicite as alterações existentes
  3. Crie uma migração personalizada, por exemplo python manage.py makemigrations --empty yourappname (veja o link compartilhado por @2ps
  4. Edite o arquivo gerado acima. Adicionei um exemplo de migração de dados abaixo.
  5. rum manage.py migrate para aplicar a migração da etapa 4 acima.

  6. Solte os modelos A e B se for esse o seu desejo, gere a migração e aplique e você deve ser bom.

    ...
    def merge_models_ab(apps, schema_editor):
        A = apps.get_model("app_name", "A")
        B = apps.get_model("app_name", "B")
        C = apps.get_model("app_name", "C")
        #come up with some interesting ways to join A and B
        #iterate over join and insert into C
        #C.objects.create(...)
    

    ...
    class Migrations(migrations.Migration):
        dependencies = [
            ('app_name', 'some_prev_migrations'),
        ]
        operations = [
            migrations.RunPython(merge_models_ab),
        ]