Персонализираните миграции трябва да работят.
- Вече имате модели A и B, така че създайте модел C с полетата, които искате от двата модела.
- Направете нормална миграция на схема, напр. manage.py makemigrations ... и кандидатствайте за всички съществуващи промени
- Създайте персонализирана миграция, напр. python manage.py makemigrations --empty yourappname (вижте връзката, споделена от @2ps
- Редактирайте файла, генериран по-горе, добавих примерна миграция на данни по-долу.
- rum manage.py migrate, за да приложите миграцията от стъпка 4 по-горе.
-
Изхвърлете модели A и B, ако това е вашето желание, генерирайте миграцията и приложете и трябва да сте добре.
...
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), ]