Question

Quel est le bon moyen de créer des types pgsql personnalisés pour l'application Django de manière à ce que chaque fois que la base de données soit créée avec syncdb, tous les types personnalisés soient créés avant la création de tables (pour que les tables puissent utiliser ce type)?

J'utilise aussi django-evolution, mais ce n'est pas une solution appropriée & # 8212; il court après syncdb. Je peux imaginer une solution de contournement telle que la définition de modèles avec des types de champs standard, puis la création de types et la modification de types de colonnes dans des évolutions, mais ce n'est vraiment pas agréable et plutôt obscur ...

Une idée?

Était-ce utile?

La solution

Je ne crois pas qu'il y ait un moyen de faire cela à Django. Comme vous le savez probablement, il existe un post_syncdb signal, mais aucun signal pour pre_syncdb.

Je pense donc qu'il n'y a que deux options: pirater cluster le signal vers Django ou utiliser un outil d'automatisation tel que Fabric .

Pirater votre propre signal <=>, même si c'est la bonne façon de le faire, ne sera probablement pas simple et vous devez conserver le patch à chaque nouvelle version de Django.

D'autre part, non seulement un outil d'automatisation tel que Fabric est-il simple, mais il procure également d'autres avantages à votre projet.

Par exemple, une partie de mon Fabfile ressemble à:

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

Ajoutez quelque chose comme ceci juste avant la syncdb:

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

et vous devriez être prêt à y aller simplement en tapant:

$ fab createdb

ou:

$ fab cluster createdb

pour exécuter la commande sur toutes les machines répertoriées dans votre environnement, appelées <=>.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top