J'essayais de créer des migrations dans une application existante à l'aide de la commande makemigrations mais elle affiche "Aucun changement détecté".
Habituellement, je crée de nouvelles applications à l'aide de la startapp
commande, mais je ne l'ai pas utilisée pour cette application lorsque je l'ai créée.
Après le débogage, j'ai constaté qu'il ne crée pas de migration car le migrations
package / dossier est absent d'une application.
Serait-il préférable de créer le dossier s'il n'y est pas ou si je manque quelque chose?
python
django
django-migrations
Dilraj
la source
la source
makemigrations <myapp>
comme l'a également souligné Alasdair.Réponses:
Pour créer des migrations initiales pour une application, exécutez
makemigrations
et spécifiez le nom de l'application. Le dossier migrations sera créé.Votre application doit être incluse en
INSTALLED_APPS
premier (dans settings.py).la source
migrations
dossier. Cela peut se produire si vous avez créé l'application manuellement ou si vous avez mis à niveau une ancienne version de Django qui n'avait pas de migrations.__init__.py
) nommé «migrations» dans l'application.migrate
.Mon problème (et donc sa solution) était encore différent de ceux décrits ci-dessus.
Je n'utilisais pas de
models.py
fichier, mais j'ai créé unmodels
répertoire etmy_model.py
j'ai créé le fichier là, où j'ai mis mon modèle. Django n'a pas pu trouver mon modèle, il a donc écrit qu'il n'y avait pas de migrations à appliquer.Ma solution était: dans le
my_app/models/__init__.py
fichier, j'ai ajouté cette ligne:from .my_model import MyModel
la source
Il existe plusieurs raisons possibles pour lesquelles django ne détecte pas ce qu'il faut migrer pendant la
makemigrations
commande.INSTALLED_APPS
fichier .dictmakemigrations -v 3
verbosité commence par s'exécuter pour la verbosité. Cela pourrait éclairer le problème.INSTALLED_APPS
il est recommandé de spécifier le chemin complet de la configuration de l'application du module 'apply.apps.MyAppConfig'manage.py makemigrations --settings mysite.settings
manage.py makemigrations myapp
, ce qui réduit les migrations pour l'application seule et vous aide à isoler le problème.modèle meta check vous avez le droit
app_label
dans votre modèle metaDéboguer django debug django core script. La commande makemigrations est assez simple. Voici comment le faire dans pycharm . modifier la définition de votre script en fonction (ex:
makemigrations --traceback myapp
)Plusieurs bases de données:
allow_syncdb
méthode.la source
from recurrence.forms import RecurrenceField
mais ça aurait dû l'êtrefrom recurrence.fields import RecurrenceField
.makemigrations
script recherche les modèles qui sont connectés à partir deurls.py
". Trouvé ici stackoverflow.com/questions/43093651/…python manage.py makemigrations -v 3 <app_name>
J'ai lu de nombreuses réponses à cette question indiquant souvent de simplement exécuter
makemigrations
d'autres manières. Mais pour moi, le problème était dans laMeta
sous - classe des modèles.J'ai une configuration d'application qui dit
label = <app name>
(dans leapps.py
fichier, à côtémodels.py
,views.py
etc.). Si, par hasard, votre méta-classe n'a pas le même libellé que le libellé de l'application (par exemple, parce que vous divisez une trop grande application en plusieurs), aucun changement n'est détecté (et aucun message d'erreur utile). Donc, dans ma classe de modèle, j'ai maintenant:Lancer Django 1.10 ici.
la source
C'est un commentaire mais devrait probablement être une réponse.
Assurez-vous que le nom de votre application est dans settings.py
INSTALLED_APPS
sinon quoi que vous fassiez, les migrations ne seront pas exécutées.Puis exécutez:
la source
J'ai eu un autre problème non décrit ici, qui m'a rendu fou.
J'avais un ',' à la fin peut-être sur une ligne à partir du copier-coller. La ligne avec is_dumb ne crée pas de migration de modèle avec './manage.py makemigrations' mais ne génère pas non plus d'erreur. Après avoir supprimé le ',' cela a fonctionné comme prévu.
Soyez donc prudent lorsque vous copiez et collez :-)
la source
is_dumb
est égal à(models.BooleanField(default=False), )
quimakemigrations
ne sait pas comment convertir en une colonne de base de données.Il y a parfois quand
./manage.py makemigrations
est supérieur à./manage.py makemigrations <myapp>
parce qu'il peut gérer certains conflits entre les applications.Ces occasions se produisent en silence et il faut plusieurs heures
swearing
pour comprendre la vraie signification duNo changes detected
message redouté .Par conséquent, il est préférable d'utiliser la commande suivante:
./manage.py makemigrations <myapp1> <myapp2> ... <myappN>
la source
J'avais copié une table depuis l'extérieur de django et la classe Meta était par défaut "managed = false". Par exemple:
En changeant manged en True, makemigrations a commencé à prendre en compte les changements.
la source
la source
J'ai résolu ce problème en faisant ceci:
la source
J'ai oublié de mettre les bons arguments:
dans models.py, puis il a commencé à laisser tomber cet ennuyeux
Aucune modification détectée dans l'application «myApp»
la source
Une autre raison possible est si vous aviez des modèles définis dans un autre fichier (pas dans un package) et que vous ne les avez référencés nulle part ailleurs.
Pour moi, le simple fait d'ajouter
from .graph_model import *
àadmin.py
(oùgraph_model.py
était le nouveau fichier) a résolu le problème.la source
Mon problème était beaucoup plus simple que les réponses ci-dessus et probablement une raison beaucoup plus courante tant que votre projet est déjà configuré et fonctionne. Dans l'une de mes applications qui fonctionnait depuis longtemps, les migrations semblaient bancales, alors pressé, j'ai fait ce qui suit:
Whaat ??
J'avais également supprimé par erreur tous les
__init__.py
fichiers :( - Tout fonctionnait à nouveau après mon entrée et:Pour chacune de mes applications, le a
makemigrations
fonctionné à nouveau.Il s'avère que j'avais créé manuellement une nouvelle application en copiant une autre et que j'avais oublié de mettre le
__init__.py
dans lemigrations
dossier et cela m'a confié que tout était bancal - ce qui m'a amené à aggraver les choses avec unrm -r
comme décrit ci-dessus.J'espère que cela aidera quelqu'un à insulter l'erreur "Aucun changement détecté" pendant quelques heures.
la source
La solution est que vous devez inclure votre application dans INSTALLED_APPS.
Je l'ai manqué et j'ai trouvé le même problème.
après avoir spécifié le nom de mon application, la migration a réussi
veuillez noter que j'ai mentionné les tableaux en dernier, qui est le nom de mon application.
la source
INSTALLED_APPS = [
]
assurez-vous que 'blog.apps.BlogConfig', (ceci est inclus dans votre settings.py afin de faire les migrations de votre application)
puis exécutez python3 manage.py blog makemigrations ou le nom de votre application
la source
Un problème très stupide que vous pouvez également avoir est d'en définir deux
class Meta
dans votre modèle. Dans ce cas, toute modification apportée au premier ne sera pas appliquée lors de l'exécutionmakemigrations
.la source
Je sais que c'est une vieille question, mais je me suis battu avec ce même problème toute la journée et ma solution était simple.
J'avais ma structure de répertoire quelque chose du genre ...
Et comme tous les autres modèles jusqu'à celui avec
main_app
lequel j'ai eu un problème étaient importés ailleurs qui ont fini par être importés à partir de laquelle était enregistré dans leINSTALLED_APPS
, j'ai juste eu de la chance qu'ils aient tous fonctionné.Mais comme je n'ai ajouté que chacun
app
àINSTALLED_APPS
et non leapp_sub*
quand j'ai finalement ajouté un nouveau fichier de modèles qui n'a été importé nulle part ailleurs, Django l'a totalement ignoré.Ma solution consistait à ajouter un
models.py
fichier au répertoire de base de chacunapp
comme ceci ...puis ajoutez
from apps.app.app_sub1 import *
et ainsi de suite à chacun des fichiers deapp
niveaumodels.py
.Bleh ... cela m'a pris tellement de temps à comprendre et je n'ai trouvé la solution nulle part ... Je suis même allé à la page 2 des résultats Google.
J'espère que cela aide quelqu'un!
la source
J'ai eu un problème similaire avec django 3.0, selon la section migrations de la documentation officielle , l'exécuter était suffisant pour mettre à jour la structure de ma table:
Mais le résultat était toujours le même: «aucun changement détecté» sur mes modèles après avoir exécuté le script «makemigrations». J'ai eu une erreur de syntaxe sur models.py au niveau du modèle que je voulais mettre à jour sur db:
au lieu de:
Résoudre cette erreur stupide, avec ces commandes, la migration s'est faite sans problème. Peut-être que cela aide quelqu'un.
la source
Vous devez ajouter
polls.apps.PollsConfig
àINSTALLED_APPS
ensetting.py
la source
Dans mon cas, j'ai oublié d'insérer les arguments de classe
Faux:
Correct
la source
Dans mon cas, j'ai d'abord ajouté un champ au modèle et Django a dit qu'il n'y avait aucun changement.
Alors j'ai décidé de changer le "nom de table" du modèle, makemigrations a fonctionné. Ensuite, j'ai changé le nom de la table par défaut, et le nouveau champ était également là.
Il y a un "bogue" dans le système de migration django, parfois il ne voit pas le nouveau champ. Peut être lié au champ de date.
la source
La raison possible pourrait être la suppression du fichier db existant et du dossier de migrations que vous pouvez utiliser python,
manage.py makemigrations <app_name>
cela devrait fonctionner. J'ai déjà été confronté à un problème similaire.la source
Encore un cas de bord et une solution:
J'ai ajouté un champ booléen, et en même temps ajouté un @property le référençant, avec le même nom (doh). Commenté la propriété et la migration voit et ajoute le nouveau champ. Renommé la propriété et tout va bien.
la source
Si vous disposez du
managed = True
modèle Meta in yout, vous devez le supprimer et effectuer une migration. Ensuite, exécutez à nouveau les migrations, il détectera les nouvelles mises à jour.la source
Lors de l'ajout de nouveaux modèles à l'application django api et de l'exécution de
python manage.py makemigrations
l'outil, aucun nouveau modèle n'a été détecté.Ce qui est étrange, c'est que les anciens modèles ont été sélectionnés
makemigrations
, mais c'est parce qu'ils étaient référencés dans laurlpatterns
chaîne et que l'outil les a détectés d'une manière ou d'une autre. Alors gardez un œil sur ce comportement.Le problème était dû au fait que la structure de répertoires correspondant au package models contenait des sous-packages et que tous les
__init__.py
fichiers étaient vides. Ils doivent importer explicitement toutes les classes requises dans chaque sous-dossier et dans les modèles__init__.py
pour que Django les récupère avec l'makemigrations
outil.la source
Essayez d'enregistrer votre modèle dans admin.py, voici un exemple: - admin.site.register (YourModelHere)
Vous pouvez faire les choses suivantes: - 1. admin.site.register (YourModelHere) # Dans admin.py 2. Rechargez la page et réessayez 3. Appuyez sur CTRL-S et enregistrez 4. Il peut y avoir une erreur, vérifiez spécialement les modèles .py et admin.py 5. Ou, à la fin de tout cela, redémarrez simplement le serveur
la source
J'espère que cela pourrait aider quelqu'un d'autre, car j'ai fini par passer des heures à essayer de le chasser.
Si vous avez une fonction dans votre modèle du même nom, cela supprimera la valeur. Assez évident avec le recul, mais néanmoins.
Donc, si vous avez quelque chose comme ça:
Dans ce cas, la fonction remplacera le paramètre ci-dessus, le rendant "invisible" pour
makemigrations
.la source
La meilleure chose que vous puissiez faire est de supprimer la base de données existante. Dans mon cas, j'utilisais la base de données SQL phpMyAdmin, donc je supprime manuellement la base de données créée ici.
Après la suppression: Je crée une base de données dans PhpMyAdmin et n'ajoute aucune table.
Exécutez à nouveau les commandes suivantes:
python manage.py makemigrations
python manage.py migrate
Après ces commandes : Vous pouvez voir que django a automatiquement créé d'autres tables nécessaires dans la base de données (il y a environ 10 tables).
python manage.py makemigrations <app_name>
python manage.py migrate
Et enfin: après les commandes ci-dessus, tous les modèles (tables) que vous avez créés sont directement importés dans la base de données.
J'espère que cela aidera.
la source
Mon problème avec cette erreur, c'est que j'avais inclus:
Modèle intérieur pour lequel je voulais créer une migration.
la source
J'ai eu un problème différent lors de la création d'une nouvelle application appelée
deals
. Je voulais séparer les modèles à l'intérieur de cette application, donc j'avais 2 fichiers de modèle nommésdeals.py
etdealers.py
. En courant,python manage.py makemigrations
j'ai:No changes detected
.Je suis allé de l'avant et à l'intérieur du
__init__.py
qui vit sur le même répertoire où vivaient mes fichiers de modèle (offres et revendeur) que j'ai faitEt puis le
makemigrations
commande a fonctionné.Il s'avère que si vous n'importez les modèles nulle part OU que le nom de votre fichier de modèles ne l'est pas,
models.py
les modèles ne seront pas détectés.Un autre problème qui m'est arrivé est la façon dont j'ai écrit l'application dans
settings.py
:J'ai eu:
Cela aurait dû inclure le dossier du projet racine:
la source