Создание комбинированного индекса из модели Django

У меня есть следующая модель:

from django.db import models class PopulationData(models.Model): slot = models.IntegerField(db_index=True) sample = models.IntegerField() value = models.FloatField() class Meta: unique_together = (('slot', 'sample'),) 

И я хотел бы создать также составной индекс для пары столбцов, у которой есть ограничение UNIQUE , например:

 CREATE INDEX my_compound_index ON myapp_populationdata (slot, sample); 

Прямо сейчас у меня есть отдельный код, связанный с сигналом post_syncdb который выдает предыдущую инструкцию SQL. Есть ли способ указать это из спецификации модели? (Примечание: я использую ветвь 1.3).

Начиная с django-1.5, вы можете сделать составной индекс, используя мета-опцию index_together: https://docs.djangoproject.com/en/dev/ref/models/options/#index-together

Я думаю, что это не реализовано в ORM django.

Если вы используете инструмент миграции (например, юг), который может быть хорошим местом для добавления этого оператора sql, или если вы предпочитаете избегать raw sql, вы можете использовать sqlalchemy (core), но этот случай звучит достаточно просто, чтобы просто пойти с sql.

Начиная с Django-1.11 используйте опцию Meta.indexes https://docs.djangoproject.com/en/1.11/ref/models/indexes/ :

 from django.db import models class PopulationData(models.Model): slot = models.IntegerField(db_index=True) sample = models.IntegerField() value = models.FloatField() class Meta: unique_together = (('slot', 'sample'),) indexes = [ models.Index(fields=['slot', 'sample']), ]