Как избежать циклического импорта в Python Google App Engine Ndb (шаблон, который следует избегать)

Я пытаюсь найти шаблон, избегая циклического импорта в архитектуре хранилища данных Python Google App Engine Ndb. Я хочу иметь отдельные файлы, родительский режим и детские модели (связанные с родителями).

Единственным вариантом, который я нашел, является объединение родительских и дочерних элементов в один файл, но он делает код слишком сложным и не просто масштабируется (добавьте больше строк).

В настоящее время у меня есть такая структура проекта.

parent.py - parent entity base.py - abstract base entity for children children.py - children module 

Я прочитал этот ответ Как избежать кругового импорта в Python? и пытается использовать, но безуспешно, это нормально с типичными объектами Python, но не работает с инициализированными свойствами ndb . Я провожу несколько часов, но понятия не имею, почему это не работает.

parent.py (нужны дочерние элементы для зависимостей delete)

 import children from google.appengine.ext import ndb class Parent(ndb.Model): def deleteWithChildren(self): for child in children.Child.query(Child.parent == self.key).fetch(): child.key.delete() self.key.delete() 

base.py (требуется родительский элемент для ссылки)

 from google.appengine.ext import ndb import parent class BaseChild(ndb.Model): parent = ndb.KeyProperty(kind=parent.Parent) 

children.py (нужна базовая база тоже нужна Родитель)

 import base class Child(base.BaseChild): pass 

Это создает исключение, когда я пытаюсь выполнить такой import Parent кода import Parent :

  File "sandbox\sandbox.py", line 6, in <module> from web_site.seo.frontend.sandbox.parent import Parent File "sandbox\parent.py", line 4, in <module> import children File "sandbox\children.py", line 4, in <module> import base File "sandbox\base.py", line 7, in <module> class BaseChild(ndb.Model): File "sandbox\base.py", line 8, in BaseChild parent = ndb.KeyProperty(model=parent.Parent) AttributeError: 'module' object has no attribute 'Parent' 

Вы можете заменить запрос, в котором parent должен импортировать данные, а именно:

 children.Child.query(Child.parent == self.key) 

с GQL , который удовлетворен только строками:

 ndb.gql('SELECT * FROM Child WHERE parent = :1').bind(self.key)