我有xmodels.py
个文件,在x个不同的Django应用程序中。我有一些关于我在整个应用程序中调用的模型的查询。我认为最好的干燥方法是让查询被模型内部的方法调用。在
这些查询方法实际上查询/other/apps中的/other/models(以及其他models.py
文件)。我知道这会增加耦合,但这是一个大型且高度专业化的项目,所以我不能为很多东西编写通用的可重用应用程序。在
例如:
class Mentor(models.Model):
# ...
def get_future_shifts(self):
return Shift.objects.filter(mentor = self, session__date__gt = timezone.now())
我最终得到了一个循环依赖(它跨越了4个应用程序,所以我认为除非绝对必要,否则在这里发布所有代码太长了)。在
SO上Django模型通常的循环依赖性建议与models.ForeignKey
有关,这不是我的问题。我真的需要进入“外国”模式。在
有人告诉我循环依赖是糟糕设计的标志,而我糟糕的设计是我的模型中有太多的动态辅助方法?Django并没有真正提供任何其他地方来放置这些没有坚持干燥。在
您的
get_future_shifts()
方法意味着Shift
在Mentor
上有一个FK。在这种情况下,您不需要在包含Mentor
的模块中导入Shift
,只需使用反向关系即:但这只会“从技术上”解决循环依赖,因为这意味着
Mentor
对另一个应用程序有一些直接的了解,这个应用程序本身依赖于定义了Mentor
的应用程序,如果从设置中删除这个其他应用程序,整个过程将中断。在另一个解决方案是在同一个应用程序中定义
^{pr2}$get_future_shifts
与Shift' and monkeypatch
导师`,即:有些人会反对从另一个模块/应用程序扩展一个类,但是仅仅在Mentor上定义FK就已经扩展了}应该与
Mentor
,所以至少我们把相关的东西放在一起,现在Mentor
与Shift
没有直接的依赖关系——只要Mentor
的应用程序视图等都不依赖get_future_shifts()
,但这意味着{Mentor
属于同一个应用程序。在有一个方法,
django.db.models.get_model()
,它获得一个给定名称的模型。这将修复它,因为您实际上并没有导入模型。在相关问题 更多 >
编程相关推荐