3

我有许多需要时间戳和缓存控制的模型,因此继承自我正在使用TimeTrackablelck.djangomixin 库。

但是,由于某种原因,其中定义的createdmodified字段TimeTrackable没有被索引,即使同一个 mixin 库中的许多其他字段都被索引,并且我根据模型在不同程度上使用基于这些字段的排序,并且希望索引一个或两个它们在我的 postgres 数据库中。(我对这些字段上的索引并不是我真正需要的想法持开放态度,但我认为这是一个非常明确的索引用例。)

我的理解是,由于 Django 继承模型中的怪癖,如果我只是尝试用同名字段加上索引覆盖这些字段,系统将尝试创建两个同名字段并阻塞syncdb.

有什么好的方法来索引它们吗?我能想到几个选择:

  • 将代码复制/粘贴TimeTrackable到我的应用程序中(不是 DRY,但至少后果是可预测的)
  • south在迁移或同步数据库钩子或其他东西中添加单独的索引步骤(看起来很脆弱,并且对于试图通过查看应用程序代码来判断哪些列被索引的人感到困惑,因为某些列确实在模型文件中明确索引)
  • 应用程序初始化后在 postgres 中手动索引它(我必须将此应用程序交给客户端,所以我想尽量减少手动部署步骤)
  • 以某种方式使用/滥用“一起索引”元字段来索引单个字段而不是其预期用途(不知道这样做的后果是什么,如果我尝试一下)

有没有其他好的方法可以做到这一点?

4

2 回答 2

1

我最终得到的解决方案是滥用index_together子模型。丑陋与否,它是索引单个字段的最方便的方法(不检查index_together元组是否有多个成员),并且它是声明性的并且阅读起来相对清晰。

于 2014-08-21T17:53:26.043 回答
0

对于那些正在寻找 django<1.5 使用解决方案的人uniqe_together

于 2016-03-14T10:18:48.487 回答