Джанго Южный круговая зависимость


У меня есть приложение (назовем его MyApp) в проекте Django 1.5. Приложение определяет индивидуальную модель пользователя (Мой_логин). Проект использует другое приложение (AnotherApp), которое ссылается на MyUser. MyApp ссылается на поля в другом приложении.

На моем ноутбуке для разработки все работает нормально. Я пытаюсь развернуть свой проект на сервере, и когда я перехожу к шагу миграции, MyApp терпит неудачу из-за зависимости от AnotherApp, а AnotherApp терпит неудачу из-за зависимости от MyApp (я пытался перенести приложения независимо). Оба терпят неудачу на своих соответствующих первых миграциях (0001)

Running migrations for myapp:
 - Migrating forwards to 0017_auto__blah_blah.
 > myapp:0001_initial
FATAL ERROR - The following SQL query failed: ALTER TABLE "myapp_mymodel_othermodel" ADD CONSTRAINT "othermodel_id_refs_id_ae052c6d" FOREIGN KEY ("othermodel_id") REFERENCES "anotherapp_othermodel" ("id") DEFERRABLE INITIALLY DEFERRED;
The error was: relation "anotherapp_othermodel" does not exist

Error in migration: myapp:0001_initial
DatabaseError: relation "anotherapp_othermodel" does not exist


Running migrations for anotherapp:
 - Migrating forwards to 0008_blah_blah.
 > anotherapp:0001_initial
FATAL ERROR - The following SQL query failed: ALTER TABLE "anotherapp_othermodel" ADD CONSTRAINT "creator_id_refs_id_cff6fecf" FOREIGN KEY ("creator_id") REFERENCES "myuser" ("id") DEFERRABLE INITIALLY DEFERRED;
The error was: relation "myuser" does not exist

Error in migration: anotherapp:0001_initial
DatabaseError: relation "myuser" does not exist

Есть идеи?

1 8

1 ответ:

Здесь, по-видимому, существует реальная циклическая зависимость. Однако вы можете довольно легко сломать его: переместите создание таблицы m2m в MyApp в отдельную миграцию. Самый простой способ сделать это, вероятно, - скопировать 0001_initial.py к новому имени, затем удалите блоки для таблицы m2m (вперед и назад!) в оригинале, и удалить все остальное в копии.

Копия должна быть названа так, чтобы она была упорядочена между 0001_initial и 0002_whatever -- скажем, 0001_initial2.py; и он должен зависеть от ("AnotherApp", "0001_initial"), которое, в свою очередь, должна зависеть от ("приложение", "0001_initial").