Niestandardowe migracje powinny działać.
- Masz już modele A i B, więc utwórz model C z polami, które chcesz z tych dwóch modeli.
- Wykonaj normalną migrację schematu, np. manage.py makemigrations ... i złożyć wniosek o wszelkie istniejące zmiany
- Utwórz niestandardową migrację, np. python manage.py makemigrations --empty yourappname (patrz link udostępniony przez @2ps
- Edytuj plik wygenerowany powyżej, poniżej dodałem przykładową migrację danych.
- rum manage.py migrować, aby zastosować migrację z kroku 4 powyżej.
-
Upuść modele A i B, jeśli chcesz, wygeneruj migrację i zastosuj i powinieneś być dobry.
...
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), ]