Неудачный импорт моделей между приложениями в django (циклический импорт?) - PullRequest
1 голос
/ 04 августа 2011

У меня проблемы с импортом моделей между моими приложениями в моем текущем проекте django. При попытке запустить сервер dev или синхронизировать базу данных я получаю сообщение об ошибке:

File "/path/to/Project/../Project/app1/models.py", line 3, in <module>
class SomeModel(Thing):
NameError: name 'Thing' is not defined

Вещи определены в Project / main / models.py , которые я импортирую в Project / app1 / models.py через:

from project.main.models import Thing

Мне известно, что такого рода вещи могут быть результатом того, что python предотвращает циклический импорт.

В настоящее время у меня есть три приложения django: main, app1, app2

Импорт для каждого приложения выглядит следующим образом:

главный:

from project.app1.models import AnotherThing

app1:

from project.main.models import Thing

app2:

from project.main.models import Thing
from project.app1 import Something

Я подозреваю, что проблема заключается в импорте моделей из приложения app1 в app2, поскольку оба эти приложения импортируют модели из main, который, в свою очередь, импортирует модели из app1 и т. Д.

Если это так, - какие еще методы я могу использовать для достижения того же эффекта, что и при импорте? Есть ли более приемлемый способ организации вещей, чтобы я не столкнулся с этим?

1 Ответ

2 голосов
/ 04 августа 2011

Если вы хотите создать подкласс этих моделей, вам нужно удалить циклическую зависимость.Сгруппировать обычные вещи в другой модуль и заставить эти два импортировать их вместо друг друга.Если модель используется только как внешний ключ, вы можете использовать строку вместо объекта для отсрочки импорта (например, ForeignKey('app.Model') - подробности см. В документации).

...