site - framework django para python
Crear índice compuesto a partir de un modelo de Django (3)
A partir de Django-1.11 use la opción 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'']),
]
Tengo el siguiente modelo:
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''),)
Y me gustaría crear también un índice compuesto en el par de columnas que tienen la restricción UNIQUE
, como así:
CREATE INDEX my_compound_index ON myapp_populationdata (slot, sample);
Ahora mismo tengo un código separado conectado a la señal post_syncdb
que emite la declaración SQL anterior. ¿Hay alguna forma de indicarlo a partir de la especificación del modelo? (Nota: estoy usando la rama 1.3).
A partir de django-1.5, puede hacer un índice compuesto utilizando la opción meta index_together: https://docs.djangoproject.com/en/dev/ref/models/options/#index-together
Creo que eso no está implementado actualmente en el ORM de django.
Si usa una herramienta de migración (como South) que podría ser un buen lugar para agregar esa declaración de SQL o si prefiere evitar el SQL sin formato, puede usar sqlalchemy (núcleo), pero este caso suena lo suficientemente simple como para ir con SQL.