Круговой импорт выходит с приложениями Django, которые имеют зависимости друг от друга

Я пишу несколько django приложений, который дизайном связан вместе. Но я получаю круговые проблемы импорта. Я знаю, что это мог бы быть плохой дизайн, поэтому дайте примеры лучших решений, но я, может казаться, не нахожу лучший подходящий дизайн. Таким образом, если нет лучшего дизайна, как решить этого?

Это - в основном два django приложения с некоторыми моделями, которые касаются друг друга перекрестного мудрый приложением. Короче говоря система является основанной на событии системой. Таким образом, существует модель событий и модель задачи. Они живут в различных приложениях, Событиях и Задачах. Когда события инициированы, я должен проверить, что surtain задачи решены или нет, и когда задача решена, который может инициировать некоторые другие события.

Таким образом в событиях я должен хранить данные о задачах (чтобы проверить, решены ли эти задачи), и в задачах я должен хранить данные о событиях (события ведьмы для инициирования, когда они решены),

Вот некоторый пример кода из моих приложений:

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 для импорта моделей вместо того, чтобы непосредственно импортировать их, но я все еще получаю проблемы.

Конечно, я мог собрать их в то же приложение, но я ясно живо, они должны жить в отдельных приложениях, так как они обрабатывают отдельные вещи. Но да они зависят друг от друга. Если я не могу решить проблемы импорта, какие-либо идеи о том, как разработать это отличающееся?

Я мог, конечно, использовать некоторые универсальные отношения, но это на самом деле сделает вещи тяжелее для понимания для других людей, так как это не указывает тип контента, которого это должно коснуться.

5
задан espenhogbakk 9 March 2010 в 22:16
поделиться

1 ответ

Обе модели не нуждаются в полях типа «многие ко многим».

Не включайте в модель обе стороны отношения «многие ко многим».

Когда вы устанавливаете одно отношение «многие ко многим», Django вставляет за вас другую сторону отношения .

http://docs.djangoproject.com/en/1.1/topics/db/queries/#many-to-many-relationships

Оба конца отношения "многие ко многим" получают автоматический доступ через API на другой конец. API работает только как "обратное" отношение "один ко многим" , описанное выше.

«При срабатывании событий мне нужно проверить, решены ли дополнительные задачи или нет».

  • Это означает, что Событие может быть инициировано другим способом и не зависит от какой-либо Задачи.

  • Если Событие может быть инициировано, и оно приводит к Задаче, то Задачи зависят от События.

«когда задача решена, это может вызвать некоторые другие события»

  • Это означает, что Задачи зависят от События. События не зависят от Задач.

Поместите ссылку «многие ко многим» на события в задачах. Ничего не помещайте в события, так как события могут использоваться где-то еще, чтобы вызвать цепочку задач и других событий. Некоторые клиентские приложения импортируют только события.

Кроме того, вы можете предоставить ссылки на поля "многие ко многим", используя строковое имя вместо импорта модели.

7
ответ дан 14 December 2019 в 08:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: