Я пишу пару приложений django, которые по замыслу связаны между собой. Но у меня проблемы с импортом. Я знаю, что это может быть плохой дизайн, поэтому, пожалуйста, приведите примеры лучших решений, но я не могу найти более подходящий дизайн. Так что, если нет лучшего дизайна, как решить этот вопрос?
Это в основном два приложения django, с некоторыми моделями, которые связаны друг с другом в разных приложениях. Короче говоря, система - это система, основанная на событиях. Таким образом, есть модель события и модель задачи. Они живут в разных приложениях, событиях и задачах. Когда события запускаются, мне нужно проверить, что оставшиеся задачи решены или нет, и когда задача решена, это может вызвать некоторые другие события.
Таким образом, в событиях мне нужно хранить данные о задачах (чтобы проверить, решены ли эти задачи), а в задачах мне нужно хранить данные о событиях (которые запускаются при их решении)
Вот пример кода из моих приложений:
Events app
models.py
from tasks.models import Task
class Event(models.Model):
...
tasks = models.ManyToManyField(Task, help_text=_("Tasks we need to check if are solved before triggering this event."))
...
Tasks app
models.py
from events.models import Event
class Task(models.Model):
...
events = models.ManyToManyField(Event, help_text=_("Events to trigger when this task i solved."))
...
Это вызывает проблемы с импортом, когда я пытаюсь проверить:
AttributeError: 'module' object has no attribute 'Event'
Так как это решить? Я пытался использовать некоторые вспомогательные функции django в надежде, что это поможет, в частности, я пытался использовать функции django.db.models.get_app и get_model для импорта моделей вместо непосредственного их импорта, но я все еще получаю проблемы.
Конечно, я мог бы собрать их в одно и то же приложение, но я уверен, что они должны жить в разных приложениях, поскольку они обрабатывают отдельные вещи. Но да, они зависят друг от друга. Если я не могу решить проблемы с импортом, какие-нибудь идеи о том, как спроектировать это иначе?
Конечно, я мог бы использовать некоторые родовые отношения, но это на самом деле усложнило бы понимание для других людей, поскольку в нем не указан тип контента, к которому он должен относиться.