Ответ 1
Начиная с django-1.5 вы можете создать составной индекс, используя мета-опцию index_together: https://docs.djangoproject.com/en/dev/ref/models/options/#index-together
У меня есть следующая модель:
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']),
]