Модуль Python импортируется путем его выполнения сверху вниз в новом пространстве имен. Когда модуль A импортирует модуль B, оценка A.py приостанавливается до загрузки модуля B. Когда модуль B затем импортирует модуль A, он получает частично инициализированное пространство имен модуля A - в вашем случае ему не хватает класса ModelA
, поскольку импорт myproject.modelb.models
происходит до определения этого класса.
В Django вы можете исправить это, ссылаясь на модель по имени, а не по объекту класса. Таким образом, вместо того, чтобы сказать
from myproject.modela.models import ModelA
class ModelB:
a = models.ForeignKey(ModelA)
вы бы использовали (без импорта):
class ModelB:
a = models.ForeignKey('ModelA')