Добавить индекс в унаследованное поле в Django

У меня есть много моделей, которые нуждаются в метках времени и контроле кэша и, следовательно, наследуются от TimeTrackable от lck.django библиотека mixin, которую я использую.

Однако по какой-то причине created а также modified поля, определенные в TimeTrackable не индексируются, хотя многие другие поля в той же библиотеке миксинов есть, и я использую сортировку, основанную на этих полях, в той или иной степени в зависимости от модели, и я хотел бы проиндексировать одно или оба из них в моей базе данных postgres. (Я открыт для идеи, что индексирование по этим полям - не то, что мне действительно нужно, но я думаю, что это довольно четкий вариант использования для индексов.)

Насколько я понимаю, из-за причуд в модели наследования Django, если я просто попытаюсь переопределить эти поля с полями с одинаковыми именами плюс индекс, система попытается создать два поля с одинаковыми именами и подавиться syncdb,

Есть ли хороший способ их индексировать? Я могу придумать несколько вариантов:

  • скопировать / вставить код TimeTrackable в мое приложение (не СУХОЙ, но по крайней мере последствия предсказуемы)
  • добавить отдельный шаг индекса в south миграция или ловушка syncdb или что-то в этом роде (кажется хрупким, и сбивает с толку тех, кто пытается сказать, какие столбцы индексируются, просматривая код приложения, учитывая, что некоторые столбцы действительно явно индексируются в файлах модели)
  • индексируйте его вручную в postgres после инициализации приложения (я должен передать это приложение клиенту, поэтому я хотел бы минимизировать шаги ручного развертывания)
  • каким-то образом использовать / злоупотреблять мета-полем "индексировать вместе" для индексации отдельных полей вместо их предполагаемого использования (понятия не имею, к чему это приведет, если бы я попробовал)

Есть ли другие хорошие способы сделать это?

2 ответа

Решение

Решение, на котором я остановился, было неправильным index_together на детской модели. Ужасно или нет, это самый удобный способ индексировать отдельное поле (нет проверки, что index_together кортежи имеют более одного члена), и это декларативно и относительно понятно для чтения.

Для тех, кто ищет решения для django<1.5, используйте uniqe_together

Другие вопросы по тегам