Comme le titre l'indique, je n'arrive pas à faire fonctionner les migrations.
L'application était à l'origine sous 1.6, donc je comprends que les migrations ne seront pas là au départ, et en effet si je l'exécute, python manage.py migrate
j'obtiens:
Operations to perform:
Synchronize unmigrated apps: myapp
Apply all migrations: admin, contenttypes, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Installing custom SQL...
Installing indexes...
Running migrations:
No migrations to apply.
Si je modifie un modèle dans myapp
, il est toujours indiqué non migré, comme prévu.
Mais si je cours, python manage.py makemigrations myapp
j'obtiens:
No changes detected in app 'myapp'
Cela ne semble pas avoir d'importance ou comment j'exécute la commande, cela ne détecte jamais l'application comme ayant des modifications, ni n'ajoute de fichiers de migration à l'application.
Existe-t-il un moyen de forcer une application à migrer et de dire essentiellement "C'est ma base pour travailler" ou quoi que ce soit? Ou est-ce que je manque quelque chose?
Ma base de données est une base de données PostgreSQL si cela aide du tout.
la source
Réponses:
Si vous passez d'une application existante que vous avez créée dans django 1.6, vous devez effectuer une étape préalable (comme je l'ai découvert) répertoriée dans la documentation:
La documentation ne rend pas évident que vous devez ajouter l'étiquette d'application à la commande, car la première chose qu'elle vous dit de faire est de savoir
python manage.py makemigrations
laquelle échouera. La migration initiale est effectuée lorsque vous créez votre application dans la version 1.7, mais si vous étiez originaire de la version 1.6, elle n'aurait pas été effectuée. Consultez la rubrique «Ajout de la migration aux applications» dans la documentation pour plus de détails.la source
python manage.py makemigrations APP_LABEL
pour chacun?./manage.py startapp
, mais je devais quand même mentionner explicitement le labelCela peut se produire pour les raisons suivantes:
INSTALLED_APPS
liste danssettings.py
(vous devez ajouter le nom de l' application ou le chemin en pointillé à la sous-classe d'AppConfig dans apps.py dans le dossier de l'application, en fonction de la version de django que vous utilisez). Reportez-vous à la documentation: INSTALLED_APPSmigrations
dossier dans ces applications. (Solution: créez simplement ce dossier).__init__.py
fichier dans lemigrations
dossier de ces applications. (Solution: créez simplement un fichier vide avec le nom __init__.py )__init__.py
fichier dans le dossier de l'application. (Solution: créez simplement un fichier vide avec le nom __init__.py )models.py
fichier dans l'applicationmodels.py
n'hérite pasdjango.db.models.Model
models.py
Remarque: une erreur courante consiste à ajouter un
migrations
dossier dans un.gitignore
fichier. Lorsqu'il est cloné à partir du référentiel distant, lemigrations
dossier et / ou les__init__.py
fichiers seront manquants dans le référentiel local. Cela pose problème.Je suggère de gitignore les fichiers de migration en ajoutant les lignes suivantes au
.gitignore
fichierla source
__init__.py
dossier avec les migrations.You don't have __init__.py file inside migrations folder of those apps. (Solution: Just create an empty file with name __init__.py)
.. et cela a été causé par l'ajout des fichiers à.gitignore
__init__.py
fichier python 3.3 soit requis dans un répertoire pour qu'il soit traité comme un package python. voir çaOk, on dirait que j'ai raté une étape évidente, mais poster ceci au cas où quelqu'un d'autre ferait de même.
Lors de la mise à niveau vers la version 1.7, mes modèles sont devenus non gérés (
managed = False
) - je les avais commeTrue
avant, mais il semble qu'ils ont été rétablis.La suppression de cette ligne (par défaut sur True), puis l'exécution
makemigrations
immédiate d'un module de migration et maintenant cela fonctionne.makemigrations
ne fonctionnera pas sur les tables non gérées (ce qui est évident avec le recul)la source
manage.py inspectdb
ajoute manage = False! au cas où vous importeriez des bases de données héritées, vous devez les régler soigneusement!app_label
est le mêmeMa solution n'a pas été traitée ici, je la poste donc. J'avais utilisé
syncdb
pour un projet - juste pour le faire fonctionner. Ensuite, quand j'ai essayé de commencer à utiliser les migrations Django, cela les a d'abord simulées, puis j'ai dit que c'était `` OK '' mais rien ne se passait pour la base de données.Ma solution consistait simplement à supprimer tous les fichiers de migration de mon application, ainsi que les enregistrements de base de données pour les migrations d'applications dans le
django_migrations
tableau.Ensuite, je viens de faire une migration initiale avec:
./manage.py makemigrations my_app
suivi par:
./manage.py migrate my_app
Maintenant, je peux faire des migrations sans problème.
la source
__init.py__
, cela ne fonctionnera pas.D'accord avec @furins. Si tout semble être en ordre et que ce problème survient, vérifiez s'il existe une méthode de propriété avec le même titre que l'attribut que vous essayez d'ajouter dans la classe Model.
la source
C'est une sorte d'erreur stupide à faire, mais avoir une virgule supplémentaire à la fin de la ligne de déclaration de champ dans la classe de modèle, fait que la ligne n'a aucun effet.
Cela se produit lorsque vous copiez collez le fichier def. de la migration, elle-même définie comme un tableau.
Mais peut-être que cela aiderait quelqu'un :-)
la source
Peut-être que je suis trop tard, mais avez-vous essayé d'avoir un
migrations
dossier dans votre application avec un__init__.py
fichier?la source
Peut-être que cela aidera quelqu'un. J'utilisais une application imbriquée. project.appname et j'avais en fait project et project.appname dans INSTALLED_APPS. La suppression du projet de INSTALLED_APPS a permis de détecter les modifications.
la source
La réponse est sur ce post stackoverflow, par cdvv7788 Migrations dans Django 1.7
J'avais exactement le même problème et faire ce qui précède fonctionnait parfaitement.
J'avais déplacé mon application django vers cloud9 et pour une raison quelconque, je n'ai jamais attrapé la migration initiale.
la source
La suite a fonctionné pour moi:
A travaillé pour moi: Python 3.4, Django 1.10
la source
Les gens comme moi qui n'aiment pas les migrations peuvent utiliser les étapes ci-dessous.
python manage.py makemigrations app_label
pour la migration initiale.python manage.py migrate
pour créer des tables avant d'apporter des modifications.Si vous avez confondu l'une de ces étapes, lisez les fichiers de migration. Modifiez-les pour corriger votre schéma ou supprimer les fichiers indésirables, mais n'oubliez pas de modifier la partie dépendances du prochain fichier de migration;)
J'espère que cela aidera quelqu'un à l'avenir.
la source
Vous voulez vérifier
settings.py
dans laINSTALLED_APPS
liste et vous assurer que toutes les applications avec des modèles y sont répertoriées.L'exécution
makemigrations
dans le dossier du projet signifie qu'il cherchera à mettre à jour toutes les tables liées à toutes les applications incluses danssettings.py
le projet. Une fois que vous l'avez inclus,makemigrations
l'application inclura automatiquement (cela économise beaucoup de travail afin que vous n'ayez pas à exécutermakemigrations app_name
pour chaque application de votre projet / site).la source
Juste au cas où vous auriez un champ spécifique qui ne serait pas identifié par makemigrations: vérifiez deux fois si vous avez une propriété avec le même nom.
exemple:
la propriété "écrasera" la définition du champ afin que les modifications ne soient pas identifiées par
makemigrations
la source
hourly_rate = models.DecimalField
(il manque le '()' à la fin) et cela a échoué en silence.Assurez-vous que votre modèle ne l'est pas
abstract
. J'ai fait cette erreur et cela a pris un certain temps, alors j'ai pensé que je la publierais.la source
Ajout de cette réponse car seule cette méthode m'a aidé.
J'ai supprimé le
migrations
dossier runmakemigrations
etmigrate
.Il a toujours dit: aucune migration à appliquer.
Je suis allé dans le
migrate
dossier et j'ai ouvert le dernier fichier créé,commenté la migration que je voulais (elle a été détectée et entrée là-bas)
et je suis à
migrate
nouveau exécutée .Ceci édite essentiellement le fichier de migrations manuellement.
Ne le faites que si vous comprenez le contenu du fichier.
la source
Avez-vous utilisé
schemamigration my_app --initial
après avoir renommé l'ancien dossier de migration? Essayez-le. Pourrait fonctionner. Sinon, essayez de recréer la base de données et faites migrer syncdb +. Cela a fonctionné pour moi ...la source
schemamigration
n'existe - je pense que cela fait partie du sud? Je n'ai pas du tout de dossier de migration actuellement. La suppression de monmodels.py
et la réexécutioninspectdb
ne semblaient rien faire.schemamigration
venait du sud.makemigrations
est son remplacement.makemigrations --empty
J'ai eu le même problème Assurez-vous que quelles que soient les classes que vous avez définies dans models.py, vous devez hériter de la classe models.Model.
la source
J'ai eu le même problème de devoir exécuter makemigrations deux fois et toutes sortes de comportements étranges. Il s'est avéré que la racine du problème était que j'utilisais une fonction pour définir les dates par défaut dans mes modèles, de sorte que les migrations détectaient un changement chaque fois que j'exécutais makemigrations. La réponse à cette question m'a mis sur la bonne voie: évitez de faire des migrations pour recréer le champ de date
la source
J'ai récemment mis à niveau Django de la 1.6 à la 1.8 et ai eu peu d'applications et de migrations pour eux. J'ai utilisé south et
schemamigrations
pour créer des migrations dans Django 1.6, qui est abandonné dans Django 1.8.Lorsque j'ai ajouté de nouveaux modèles après la mise à niveau, la
makemigrations
commande ne détectait aucun changement. Et puis j'ai essayé la solution suggérée par @drojf (1ère réponse), cela a bien fonctionné, mais n'a pas réussi à appliquer une fausse migration initiale (python manage.py --fake-initial
). Je faisais cela car mes tables (anciennes tables) étaient déjà créées.Enfin, cela a fonctionné pour moi, j'ai supprimé les nouveaux modèles (ou les modifications de modèle) de models.py, puis j'ai dû supprimer (ou renommer pour la sauvegarde de sécurité) le dossier de migrations de toutes les applications et exécuter python
manage.py
makemigrations pour toutes les applications, puis l'a faitpython manage.py migrate --fake-initial
. Cela a fonctionné comme un charme. Une fois la migration initiale créée pour toutes les applications et la fausse migration initiale, puis ajouté de nouveaux modèles et suivi du processusmakemigrations
migration sur cette application. Les changements ont été détectés maintenant et tout s'est bien passé.J'ai juste pensé à le partager ici, si quelqu'un fait face au même problème (avoir
schemamigrations
du sud pour ses applications), cela pourrait les aider :)la source
Peut-être que cela peut aider quelqu'un, j'ai eu le même problème.
J'ai déjà créé deux tables avec la classe de sérialiseur et les vues. Donc, quand j'ai voulu mettre à jour, j'ai eu cette erreur.
J'ai suivi ces étapes:
.\manage.py makemigrations app
.\manage.py migrate
models.py
1
et2
.models.py
5
.Si vous travaillez avec Pycharm, l'histoire locale est très utile.
la source
Peut-être que cela aidera quelqu'un.
J'ai supprimé mon
models.py
et je m'attendaismakemigrations
à créer desDeleteModel
déclarations.N'oubliez pas de supprimer les
*.pyc
fichiers!la source
Les migrations suivent les modifications apportées à la base de données, donc si vous passez de non géré à géré, vous devrez vous assurer que votre table de base de données est à jour par rapport au modèle avec lequel vous traitez.
Si vous êtes toujours en mode dev, j'ai personnellement décidé de supprimer les fichiers de migration dans mon IDE ainsi que dans la table django_migrations relative à mon modèle et de réexécuter la commande ci-dessus.
RAPPELEZ-VOUS: si vous avez une migration qui se termine par _001 dans votre IDE et _003 dans votre base de données. Django ne verra que si vous avez une migration se terminant par _004 pour quoi que ce soit à mettre à jour.
Les 2 (migrations de code et de base de données) sont liés et fonctionnent en tandem.
Bon codage.
la source
la source
Ajout de cette réponse car aucun des autres disponibles ci-dessus n'a fonctionné pour moi.
Dans mon cas, quelque chose d'encore plus étrange se passait ( version Django 1.7 ), dans mon models.py j'avais une ligne "extra" à la fin de mon fichier (c'était une ligne vide) et quand j'ai exécuté la
python manage.py makemigrations
commande, le résultat était: "aucun changement détecté".Pour résoudre ce problème, j'ai supprimé cette "ligne vide" qui se trouvait à la fin de mon fichier models.py et j'ai relancé la commande, tout a été corrigé et toutes les modifications apportées à models.py ont été détectées!
la source
Vous devrez peut-être simuler les migrations initiales à l'aide de la commande ci-dessous
la source
Tout d'abord, cette solution est applicable à ceux qui sont confrontés au même problème lors du déploiement sur le serveur heroku, j'étais confronté au même problème.
Pour déployer, il y a une étape obligatoire qui consiste à ajouter django_heroku.settings (locals ()) dans le fichier settings.py.
Changements: Lorsque j'ai changé la ligne ci-dessus en django_heroku.settings (locals (), databases = False), cela fonctionnait parfaitement.
la source
Dans mon cas, je devais ajouter mon modèle au fichier _ init _.py du dossier models où mon modèle a été défini:
la source
Ajout de mon 2c, car aucune de ces solutions n'a fonctionné pour moi, mais cela a fonctionné ...
Je venais de lancer
manage.py squashmigrations
et de supprimer les anciennes migrations (les fichiers et les lignes de la table de base de données django.migrations).Cela a laissé une ligne comme celle-ci dans le dernier fichier de migration:
Cela a apparemment perturbé Django et provoqué un comportement étrange: l'exécution
manage.py makemigrations my_app
recréerait la migration initiale comme si aucune n'existait. La suppression de lareplaces...
ligne a résolu le problème!la source
python manage.py makemigrations accounts Migrations pour 'accounts': accounts \ migrations \ 0001_initial.py - Créer un modèle Client - Créer un modèle Tag - Créer un modèle Produit - Créer un modèle Commande
Remarque: ici "comptes" est le nom de mon application
la source