Skip to content

Presuvanie modelu medzi appkami

Michal Hozza edited this page Jun 7, 2016 · 3 revisions

Uspesne vykonane v PR https://github.com/trojsten/web/pull/812, treba kuknut kvoli detailom

Znacenie

  • OldApp - stara appka
  • NewApp - nova appka

Presunutie modelov

Model sa moze presunut bez zmeny do inej appky. Nezabudneme prestahovat admina, a skontrolovat aj importy.

Migracie

Treba spravit migracie pre vsetky apppky ktore maju s presunutym modelom nieco docinenia. Vacsinu migracii treba pisat manualne, ale da sa pomoct autovygenerovanymi.

Budeme casto pouzivat:

operations = [
    migrations.SeparateDatabaseAndState(
        database_operations=database_operations,
        state_operations=state_operations,
    )
]

,kde sa da manipulovat zvlast zo stavom a zvlast z databazou.

  1. Vygenerujeme migracie automaticky pomocou manage.py migrate, tie potom upravime/nakopirujeme, tak aby splnali to co je nizsie (urcite ich tam nenechame len tak)
  2. Vyrobime migracie pre OldApp
  • treba najskor pridat migraciu, ktora premenuje tabulku, tak aby sedela pre novu appku (newapp_modelname), iba v databaze, model si v stave este nechame
  • treba pomigrovat foreign keys, tato migracia je standardna a zavisi na predoslej
  • nakoniec spravime migraciu, ktora zmaze model zo stavu (len zo stavu, tabulku nemazeme, lebo sme ju premenovali), tato migracia zavisi na vsetkych foreign key (a podobnych) migraciach, aj z inych appiek.
  1. Vyrobime migraciu pre NewApp:
  • zoberieme stnadardnu init migraciu a prepiseme ju tak, aby sa udiala len v stave (tabulku nemusime vytvarat, lebo pouzijeme tu premenovanu z OldApp), tato migracia zavisi na OldApp migracii, v ktorej sme premenovali tabulku
  1. Vyrobime foreign key migracie pre ostatne appky
  • toto su standardne migracie, malo by nam vygenerovat automaticky, treba len skontrolovat ci zavisia na na OldApp migracii, v ktorej sme premenovali tabulku
  • na tychto migraciach potom zavisi posledna OldApp migracia
  1. Posquashujeme foreign key migracie
  • aby sme vedeli migrovat z cistej db, chceme sa zbavit starych zavislosti na neexistujuci model
  • squashneme vsetky migracie kde sa vyskytoval OldApp FK, a zmazeme ho zo squashovanych migracii ak tam nahodou zostal

Poznamka na zaver

Ak sme generovali squash pomocou djanga 1.9 a py2.7, umazeme b z b'...' stringov aby nam to behalo aj s py3