Django中的通用关系

时间:2009-11-29 06:52:00

标签: django django-models

想听听你的意见。在当前阶段(1.1)你会在django中使用泛型关系还是坚持使用更传统的建模 - 假设它不可能轻易地遍历和过滤这种关系(与ForeignKey,ManyToMany,OneToOne关系相比)?

这是一个例子 - 我在每个用户最后一次看到每个页面时,当他/她决定“关注”一篇文章,他们多久想要接收电子邮件更新以及他们何时请求一个上次,当此类电子邮件最后一次发送给用户和页面修订日志时。

因此,要构建一个有意义的电子邮件摘要,我必须构建非常繁重的查询,这样用户就不会收到比他们要求的更多的电子邮件,而且这些邮件的信息量最大且简短。

一种方法 - 定义可能适合任何场景的Activity模型,并使用泛型关系将它们连接到其他模型,另一种方式 - 定义单独的模型PageView,EmailUpdateLog,EmailSubscription并以“通常的方式”访问它们。 / p>

使用通用关系的缺点 - 编写复杂查询更加困难,并且它们将在模型中运行更慢,更好的代码,并且更容易访问通用对象(例如,Activity)。

您是否找到了一种场景,在这种情况下,通用关系可以为您提供巨大的优势,而不仅仅是一个有趣的概念?

也许您找到了一些其他方式来模仿通用关系?

感谢。

2 个答案:

答案 0 :(得分:2)

我会质疑你的开始假设:

  鉴于不可能轻易地遍历和过滤这种关系

我认为遍历和过滤通用关系并不特别困难。只要您定义关系的两端,前向和后向遍历的工作方式与普通ForeignKeys的工作方式大致相同。

完全可以使这些查询与普通关系一样高效,所以我并没有真正看到很多问题。

答案 1 :(得分:-1)

一切都取决于您的要求/任务..

对于某些任务,通用关系很好(我使用它们) 为了更好地使用“传统建模”