Джанго Южный круговая зависимость
У меня есть приложение (назовем его 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 ответ:
Здесь, по-видимому, существует реальная циклическая зависимость. Однако вы можете довольно легко сломать его: переместите создание таблицы m2m в MyApp в отдельную миграцию. Самый простой способ сделать это, вероятно, - скопировать 0001_initial.py к новому имени, затем удалите блоки для таблицы m2m (вперед и назад!) в оригинале, и удалить все остальное в копии.
Копия должна быть названа так, чтобы она была упорядочена между 0001_initial и 0002_whatever -- скажем, 0001_initial2.py; и он должен зависеть от ("AnotherApp", "0001_initial"), которое, в свою очередь, должна зависеть от ("приложение", "0001_initial").