Создание комбинированного индекса из модели 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).

Ответы

Ответ 2

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

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

Ответ 3

Начиная с 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']),
        ]