2013-04-07 10 views
15

Ho il seguente modello:Crea indice composito da un modello di 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'),) 

E mi piacerebbe anche creare un indice composto sulla coppia colonna che ha il vincolo UNIQUE, in questo modo:

CREATE INDEX my_compound_index ON myapp_populationdata (slot, sample); 

In questo momento ho un codice separato collegato al segnale post_syncdb che emette la precedente istruzione SQL. C'è un modo per indicarlo dalle specifiche del modello? (Nota: sto usando il ramo 1.3).

risposta

1

Penso che non sia attualmente implementato nell'ORM django.

Se si utilizza uno strumento di migrazione (come il sud) che potrebbe essere un buon posto per aggiungere l'istruzione sql o se si preferisce evitare sql raw, è possibile utilizzare sqlalchemy (core) ma questo caso sembra abbastanza semplice da andare semplicemente con sql.

1

Avvio di Django-1.11 uso opzione Meta.indexes https://docs.djangoproject.com/en/1.11/ref/models/indexes/ da:

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']), 
     ] 
Problemi correlati