Domanda

Qual è il modo giusto per creare tipi pgsql personalizzati per l'applicazione django in modo che ogni volta che si crea un database con syncdb, tutti i tipi personalizzati vengano creati prima di creare qualsiasi tabella (in modo che le tabelle possano usare questo tipo)?

Uso anche django-evolution, ma questa non è una soluzione appropriata & # 8212; funziona dopo syncdb. Posso immaginare una soluzione alternativa come la definizione di modelli con tipi di campo standard e quindi la creazione di tipi e l'alterazione dei tipi di colonna nelle evoluzioni, ma sicuramente non è carino e in qualche modo oscuro ...

Qualche idea?

È stato utile?

Soluzione

Non credo che ci sia un modo per farlo in Django. Come probabilmente saprai, c'è un segnale post_syncdb ma nessun segnale per pre_syncdb.

Quindi penso che ci siano solo due opzioni: l'hacking cluster segnale in Django o utilizzare uno strumento di automazione come Fabric .

Attaccare il tuo segnale <=>, anche se è il modo giusto per farlo, probabilmente non sarà semplice e dovrai mantenere la patch ogni nuova versione di Django.

D'altra parte, non solo uno strumento di automazione come Fabric è semplice, ma offre altri vantaggi al tuo progetto.

Ad esempio, una parte del mio Fabfile è simile a:

def createdb():
    "Create a clean database"
    run('createdb --encoding=UNICODE $(db_name) -O $(db_owner) -U $(db_owner)')
    run('python manage.py syncdb --noinput')

Aggiungi qualcosa del genere appena prima del syncdb:

run('psql -U $(db_owner) $(db_name) < app/sql/custom_types.sql')

e dovresti essere bravo a scrivere semplicemente:

$ fab createdb

o

$ fab cluster createdb

per eseguire il comando su tutte le macchine elencate nel tuo ambiente chiamato <=>.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top