J'ai installé l'extension htstore avec succès et que tout fonctionne lorsque je Cependant, le nez crée une nouvelle base de données TEMP pour exécuter des tests dans et HSTORE n'est pas installé dedans. P>
Je dois exécuter Des idées? P> syncdb code>. (J'utilise djorm-ext-htstore ) p>
créer une extension htstore; code> sur le test DB à droite avant la synchronisation du nez la DB, mais je ne trouve aucune information sur la façon de faire ça. P>
6 Réponses :
Je suppose que vous utilisez django-nez . Dans ce cas, vous devez créer votre propre puis dans testSutuRunner code>:
Params.py code> Vous devez spécifier votre test de test personnalisé: p>
Merci! Sans courir cela, je peux voir un problème: si setup_databases () crée des tables. Ne devrions-nous pas créer l'extension en premier?
Je vous ferai savoir quand je l'exécuterai.
Cela ne fonctionne pas, si je mettez d'abord l'extension Create Create, la base de données de test n'est pas là et si je le mettez après le super, il n'est jamais couru, car c'est là que l'erreur a lieu. : - /
Cela fonctionne aussi avec DiscoverRunner (Django.Test.Runner)
Il s'agit d'un non-problème: le meilleur moyen de résoudre ce problème est d'appliquer l'extension htstore sur la base de données par défaut, Référence: Comment créer Une nouvelle base de données avec l'extension htstore déjà installée? P> template1 code> p> p>
template PSQL -D1 -C 'Créer une extension htstore;' code> p>
Depuis ma dernière réponse, Django est obsolète et supprimé Depuis Django Migration de DB, Ma suggestion est d'utiliser Voir ma réponse sur l'autre question . p> Ceci fonctionne pour le cadre de test de l'unité Django par défaut et travaillera probablement pour les tests de nez Django . P> Plus d'infos sur les signaux:
https://docs.djangoproject.com/fr/1.6/RF / Signaux / # Gestion-Signaux P> P> pré_yncdb code> signal. J'ai mis à jour la réponse pour accueillir des versions plus récentes. Les mécaniciennes de base sont identiques pour les versions plus récentes, car les deux méthodes reposent sur des signaux et le code SQL qui ne s'exécute que si l'extension HSTORE n'existe pas.
Django 1.8 + H1>
pré_syncdb code> Les signaux étaient Marqué obsolète en 1.7 em> et < Strong> complètement enlevé en 1.9 fort> . Cependant, ils ont introduit un nouveau signal appelé
pré_migrate code >
qui peut être utilisé de la même manière. p>
django 1.6+ (réponse originale) h1>
Pre_Syncdb Code> Crochet de signal. P>
pré_syncdb code> Le signal est tiré avant la création de la table modèle, ce qui le rend idéal pour vous assurer que l'extension est installée lorsque la base de données de test est configurée à chaque fois. Le
s'il n'existe pas code> garantit que PostgreSQL ignore la commande si l'extension est déjà installée. Vous obtiendrez une erreur si vous exécutez
créer une extension code> sur une extension qui existe déjà. P>
Aussi vous pouvez exécuter la commande SQL dans une migration (Django 1.8):
class Migration(migrations.Migration): # ... operations = [ migrations.RunSQL('create extension hstore;'), # ...
avec Django 1.8 (qui est obsolète maintenant, mais il existe toujours en 3.2): https://docs.djangoproject.com/fr/3.2/ref/contrib/postgres/fields/#hstorefield P> EDIT: Notez juste qu'il y a aussi un JSONFIELD qui traite (ONU) marshalling de JSON déjà et en ligne de recherche. La hstoréextension n'est pas nécessaire pour cela. Nécessite Django> = 1.11 et postgres> = 9.4. P> p>
Cela devrait être la première opération dans la première migration - avant les migrations qui effectuent une opération liée à HSTORE.
C'est une bonne réponse et le seul inconvénient est qu'il faut éditer / modifier manuellement une migration (au moins dans mon cas). Je me demande pourquoi cela n'est pas fait dans le cadre de la migration initiale lorsqu'un HSTORE code> est utilisé pour la première fois?
L'installation des extensions nécessite des privilèges superutilisateurs à Postgres. Vous pouvez choisir d'installer l'extension en dehors de la configuration Django régulière pour éviter de donner votre système Django ces privilèges.
C'est un travail pour moi
https://gist.github.com/smcoll/bb2533e4b2ab011b887b paramètres.py p>
Vous pouvez vous épargner beaucoup de douleur en créant l'extension sur la base de données code> Template1 code> Postgres. Ensuite, toute base de données que vous créez après cela aura l'extension HSTORE.
Rantalaplan, cela aurait dû être la réponse!
C'est bon, j'évite habituellement de donner des réponses à une ligne. Heureux que j'ai aidé.
Lorsque la réponse est une doublure, c'est légitime! Merci beaucoup :-)