esp*_*akk 5 python django import design-patterns
我正在编写一些设计耦合在一起的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."))
...
Run Code Online (Sandbox Code Playgroud)
当我尝试验证时,这会导致导入问题:
AttributeError: 'module' object has no attribute 'Event'
Run Code Online (Sandbox Code Playgroud)
那么如何解决这个问题?我试图使用一些django辅助函数,希望这会有所帮助,更具体地说,我试图使用django.db.models.get_app和get_model函数导入模型而不是直接导入它们,但我仍然得到问题.
当然我可以将它们收集到同一个应用程序中,但我清楚地相信它们应该存在于不同的应用程序中,因为它们处理单独的事情.但是,他们是相互依赖的.如果我无法解决导入问题,任何关于如何设计这个不同的想法?
我当然可以使用一些通用关系,但这实际上会让其他人更难理解,因为它没有指定它应该涉及的内容类型.
两种模型都不需要多对多字段.
不要在模型中放置多对多关系的两面.
当你提出一对多关系时,Django会为你插入关系的另一面.
http://docs.djangoproject.com/en/1.1/topics/db/queries/#many-to-many-relationships
多对多关系的两端都可以自动访问另一端的API.API就像上面的"向后"一对多关系一样.
"当触发事件时,我需要检查是否解决了某些任务".
这意味着事件可以通过其他方式触发,并且独立于任何任务.
如果可以触发事件并导致任务,则任务取决于事件.
"当任务解决时,可以触发其他一些事件"
将多对多引用放在任务中的事件中.什么都不放在事件中,因为事件可以在其他地方使用,以触发一系列任务和其他事件.某些客户端应用程序仅导入事件.
此外,您可以使用字符串名称提供多对多字段引用,而不是导入模型.
归档时间: |
|
查看次数: |
2948 次 |
最近记录: |