代码之家  ›  专栏  ›  技术社区  ›  espenhogbakk

Django应用程序相互依赖的循环导入问题

  •  5
  • espenhogbakk  · 技术社区  · 16 年前

    我正在写一些设计上结合在一起的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函数来导入模型,而不是直接导入模型,但我仍然遇到问题。

    当然,我可以将它们收集到同一个应用程序中,但我清楚地相信它们应该生活在不同的应用程序中,因为它们处理不同的事情。但是的,他们是相互依赖的。如果我不能解决进口问题,对如何设计这种不同的想法?

    当然,我可以使用一些通用关系,但这实际上会使其他人更难理解,因为它没有指定应该与之相关的内容类型。

    1 回复  |  直到 16 年前
        1
  •  7
  •   S.Lott    16 年前

    两种模型都不需要多到多个字段。

    不要将多对多关系的双方都放在模型中。

    当你建立一对多的关系时, Django为您插入关系的另一面 .

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

    多对多的两端 关系获取自动API访问 到另一端。API工作正常 作为“向后”的一对多 关系,上面。

    “当事件触发时,我需要检查附加任务是否已解决”。

    • 这意味着事件可以以其他方式触发,并且独立于任何任务。

    • 如果可以触发一个事件并导致任务,那么任务取决于事件。

    任务解决后,会触发其他事件

    • 这意味着任务取决于事件。事件不依赖于任务。

    在任务中对事件进行多对多引用。在事件中不放置任何内容,因为事件可用于其他地方,以触发任务链和其他事件。某些客户端应用程序将只导入事件。

    此外,可以使用字符串名称而不是导入模型来提供多对多字段引用。