Добавить индекс в унаследованное поле в 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