在django中为继承的字段添加索引

时间:2013-04-09 21:43:53

标签: python django django-models django-inheritance

我有很多需要时间戳和缓存控制的模型,因此继承自lck.django的{​​{3}},我正在使用的mixin库。

但是,出于某种原因,created中定义的modifiedTimeTrackable字段未编入索引,即使同一个mixin库中的许多其他字段都是,并且我使用基于的排序这些字段在不同程度上基于模型,并且想在我的postgres数据库中索引其中一个或两个。 (我对这些字段的索引不是我实际需要的想法持开放态度,但我认为这是一个非常明确的索引用例。)

我的理解是,由于Django的继承模型中的怪癖,如果我只是尝试使用相同名称的字段和索引覆盖这些字段,系统将尝试创建两个具有相同名称的字段并阻塞{{ 1}}。

有没有什么好方法可以索引它们?我可以想到几个选择:

  • syncdb的代码复制/粘贴到我的应用中(不是DRY,但至少后果是可预测的)
  • TimeTrackable迁移或syncdb挂钩或其他东西中添加一个单独的索引步骤(看起来很脆弱,并且对于试图通过查看应用程序代码来判断哪些列被索引的人来说很困惑,因为某些列确实是明确索引的在模型文件中)
  • 在应用程序初始化后在postgres中手动索引(我必须将此应用程序交给客户端,因此我希望最小化手动部署步骤)
  • 以某种方式使用/滥用TimeTrackable来索引单个字段而不是其预期用途(不知道这会产生什么后果,我是否尝试过)

还有其他好方法吗?

2 个答案:

答案 0 :(得分:1)

我最终解决的问题是在儿童模型上滥用index_together。是否丑陋,它是索引单个字段的最便捷方式(没有检查index_together元组有多个成员),它是声明性的,相对清晰的读取。

答案 1 :(得分:0)

对于那些正在寻找django< 1.5使用uniqe_together

的解决方案的人