Ich habe versucht, Migrationen innerhalb einer vorhandenen App mit dem Befehl makemigrations zu erstellen, aber es wird "Keine Änderungen erkannt" ausgegeben.
Normalerweise erstelle ich mit dem startapp
Befehl neue Apps, habe sie jedoch beim Erstellen nicht für diese App verwendet.
Nach dem Debuggen stellte ich fest, dass keine Migration erstellt wird, da die migrations
Paket / der Ordner in einer App fehlt.
Wäre es besser, wenn der Ordner erstellt wird, wenn er nicht vorhanden ist, oder wenn mir etwas fehlt?
python
django
django-migrations
Dilraj
quelle
quelle
makemigrations <myapp>
wie Alasdair auch betonte.Antworten:
Führen Sie
makemigrations
den App-Namen aus und geben Sie ihn an, um erste Migrationen für eine App zu erstellen . Der Migrationsordner wird erstellt.Ihre App muss zuerst enthalten sein
INSTALLED_APPS
(in settings.py).quelle
migrations
Ordner hat. Dies kann passieren, wenn Sie die App manuell erstellt haben oder ein Upgrade von einer älteren Version von Django durchgeführt haben, für die keine Migrationen durchgeführt wurden.__init__.py
) namens 'migrations' in der App.migrate
.Mein Problem (und damit die Lösung) war noch anders als die oben beschriebenen.
Ich habe keine
models.py
Datei verwendet, sondern einmodels
Verzeichnis erstellt und diemy_model.py
Datei dort erstellt, in der ich mein Modell abgelegt habe. Django konnte mein Modell nicht finden und schrieb, dass keine Migrationen angewendet werden müssen.Meine Lösung war: In der
my_app/models/__init__.py
Datei habe ich diese Zeile hinzugefügt:from .my_model import MyModel
quelle
Es gibt mehrere mögliche Gründe dafür, dass Django nicht erkennt, was während des
makemigrations
Befehls migriert werden soll .INSTALLED_APPS
.dict angebenmakemigrations -v 3
nach Ausführlichkeit zu suchen . Dies könnte etwas Licht in das Problem bringen.INSTALLED_APPS
wird empfohlen , die vollständige Modul app Config - Pfad ‚apply.apps.MyAppConfig‘ angebenmanage.py makemigrations --settings mysite.settings
manage.py makemigrations myapp
Dadurch werden die Migrationen nur für die App eingegrenzt und Sie können das Problem eingrenzen.Modell Meta Check Sie haben das Recht
app_label
in Ihrem Modell-MetaDebug django Debug - django Kern - Skript. Das Makemigrations-Kommando ist ziemlich einfach.So geht's im Pycharm . ändern Ihre Skriptdefinition entsprechend (zB:
makemigrations --traceback myapp
)Mehrere Datenbanken:
allow_syncdb
Methode implementieren .quelle
from recurrence.forms import RecurrenceField
aber es hätte sein sollenfrom recurrence.fields import RecurrenceField
.makemigrations
Skript sucht nach Modellen, von denen aus eine Verbindung hergestellt wirdurls.py
". Hier gefunden stackoverflow.com/questions/43093651/…python manage.py makemigrations -v 3 <app_name>
Ich habe viele Antworten auf diese Frage gelesen und oft gesagt, dass ich einfach
makemigrations
auf andere Weise laufen soll . Aber für mich lag das Problem in derMeta
Unterklasse der Modelle.Ich habe eine app Config , das sagt
label = <app name>
(in derapps.py
Datei, nebenmodels.py
,views.py
usw.). Wenn Ihre Meta-Klasse zufällig nicht dieselbe Bezeichnung wie die App-Bezeichnung hat (z. B. weil Sie eine zu große App in mehrere aufteilen), werden keine Änderungen erkannt (und es gibt keinerlei hilfreiche Fehlermeldung). Also in meiner Modellklasse habe ich jetzt:Hier läuft Django 1.10.
quelle
Es ist ein Kommentar, sollte aber wahrscheinlich eine Antwort sein.
Stellen Sie sicher, dass sich Ihr App-Name in settings.py befindet.
INSTALLED_APPS
Andernfalls werden die Migrationen unabhängig von Ihrer Tätigkeit nicht ausgeführt.Dann renne:
quelle
Ich hatte ein anderes Problem, das hier nicht beschrieben wurde, was mich verrückt machte.
Ich hatte ein abschließendes ',' in einer Zeile, vielleicht von Copy & Paste. Die Zeile mit is_dumb hat keine Modellmigration mit './manage.py makemigrations' erstellt, aber auch keinen Fehler ausgegeben. Nach dem Entfernen des ',' funktionierte es wie erwartet.
Sei also vorsichtig beim Kopieren und Einfügen :-)
quelle
is_dumb
ist also gleich,(models.BooleanField(default=False), )
wasmakemigrations
nicht weiß, wie man in eine Datenbankspalte konvertiert.Es gibt manchmal
./manage.py makemigrations
Zeiten, in denen es überlegen ist,./manage.py makemigrations <myapp>
weil es bestimmte Konflikte zwischen Apps behandeln kann.Diese Anlässe treten stillschweigend auf und es dauert mehrere Stunden
swearing
, um die wahre Bedeutung der gefürchtetenNo changes detected
Nachricht zu verstehen .Daher ist es eine weitaus bessere Wahl, den folgenden Befehl zu verwenden:
./manage.py makemigrations <myapp1> <myapp2> ... <myappN>
quelle
Ich hatte eine Tabelle von außerhalb von Django kopiert und die Meta-Klasse war standardmäßig "verwaltet = falsch". Beispielsweise:
Durch den Wechsel von Manged zu True begannen Makemigrationen, Veränderungen zu erfassen.
quelle
quelle
Ich habe dieses Problem folgendermaßen gelöst:
quelle
Ich habe vergessen, die richtigen Argumente anzugeben:
in models.py und dann fing es an, das nervig fallen zu lassen
In der App 'myApp' wurden keine Änderungen festgestellt.
quelle
Ein weiterer möglicher Grund ist, dass Sie einige Modelle in einer anderen Datei (nicht in einem Paket) definiert haben und nirgendwo anders darauf verwiesen haben.
Für mich wurde das Problem durch einfaches Hinzufügen
from .graph_model import *
zuadmin.py
(wograph_model.py
war die neue Datei) behoben.quelle
Mein Problem war viel einfacher als die obigen Antworten und wahrscheinlich ein weitaus häufigerer Grund, solange Ihr Projekt bereits eingerichtet ist und funktioniert. In einer meiner Anwendungen, die schon lange funktionierte, schienen Migrationen wackelig zu sein. In Eile habe ich Folgendes getan:
Was?
Ich hatte fälschlicherweise auch alle
__init__.py
Dateien entfernt :( - Alles funktionierte wieder, nachdem ich reingegangen war und:Für jede meiner Anwendungen hat das
makemigrations
dann wieder funktioniert.Es stellte sich heraus, dass ich eine neue Anwendung manuell erstellt hatte, indem ich eine andere kopierte, und vergessen hatte, sie
__init__.py
in denmigrations
Ordner zu legenrm -r
.Ich hoffe, dies hilft jemandem, einige Stunden lang nicht auf den Fehler "Keine Änderungen festgestellt" zu schwören.
quelle
Die Lösung besteht darin, dass Sie Ihre App in INSTALLED_APPS aufnehmen müssen.
Ich habe es verpasst und das gleiche Problem gefunden.
Nach Angabe meines App-Namens wurde die Migration erfolgreich
Bitte beachte, dass ich zuletzt Boards erwähnt habe, das ist mein App-Name.
quelle
INSTALLED_APPS = [
]]
Stellen Sie sicher, dass 'blog.apps.BlogConfig' (dies ist in Ihrer settings.py enthalten, um Ihre App-Migrationen durchzuführen).
Führen Sie dann den Blog python3 manage.py makemigrations oder Ihren App-Namen aus
quelle
Ein sehr dummes Problem, das Sie auch haben können, ist, zwei
class Meta
in Ihrem Modell zu definieren . In diesem Fall wird beim Ausführen keine Änderung an der ersten vorgenommenmakemigrations
.quelle
Ich weiß, dass dies eine alte Frage ist, aber ich habe den ganzen Tag mit demselben Problem gekämpft und meine Lösung war einfach.
Ich hatte meine Verzeichnisstruktur etwas in der Art von ...
Und da alle anderen Modelle bis zu dem, mit dem ich ein Problem hatte, an einen anderen Ort importiert wurden, der schließlich importiert wurde und von
main_app
dem im registriert wurdeINSTALLED_APPS
, hatte ich einfach Glück, dass sie alle funktionierten.Aber da ich nur hinzugefügt jede
app
anINSTALLED_APPS
und nicht dieapp_sub*
als ich endlich eine neue Modelldatei hinzugefügt habe, die nirgendwo anders importiert wurde, hat Django sie völlig ignoriert.Mein Fix war das Hinzufügen einer
models.py
Datei zum Basisverzeichnis von jedemapp
wie folgt ...und dann
from apps.app.app_sub1 import *
zu jedemapp
Level hinzufügen und so weitermodels.py
Dateien .Bleh ... das hat so lange gedauert und ich konnte nirgendwo die Lösung finden ... Ich bin sogar zu Seite 2 der Google-Ergebnisse gegangen.
Hoffe das hilft jemandem!
quelle
Sie sollten hinzufügen ,
polls.apps.PollsConfig
umINSTALLED_APPS
insetting.py
quelle
In meinem Fall habe ich vergessen, die Klassenargumente einzufügen
Falsch:
Richtig
quelle
In meinem Fall habe ich dem Modell zuerst ein Feld hinzugefügt, und Django sagte, dass es keine Änderungen gibt.
Als ich mich entschied, den "Tabellennamen" des Modells zu ändern, funktionierten Makemigrationen. Dann habe ich den Tabellennamen wieder auf Standard geändert und das neue Feld war auch da.
Es gibt einen "Fehler" im Django-Migrationssystem, manchmal wird das neue Feld nicht angezeigt. Könnte mit dem Datumsfeld zusammenhängen.
quelle
Der mögliche Grund könnte das Löschen der vorhandenen Datenbankdatei und des Migrationsordners sein. Sie können Python verwenden.
manage.py makemigrations <app_name>
Dies sollte funktionieren. Ich hatte einmal ein ähnliches Problem.quelle
Noch ein Randfall und eine Lösung:
Ich habe ein boolesches Feld hinzugefügt und gleichzeitig eine @ Eigenschaft hinzugefügt, die darauf verweist, mit demselben Namen (doh). Kommentiert die Eigenschaft und Migration sieht und fügt das neue Feld hinzu. Das Anwesen wurde umbenannt und alles ist gut.
quelle
Wenn Sie das
managed = True
in Ihrem Modell Meta haben, müssen Sie es entfernen und eine Migration durchführen. Führen Sie dann die Migrationen erneut aus, um die neuen Updates zu erkennen.quelle
Beim Hinzufügen neuer Modelle zur Django-API-Anwendung und Ausführen
python manage.py makemigrations
des Tools wurden keine neuen Modelle erkannt .Das Seltsame war, dass die alten Modelle von ausgewählt wurden
makemigrations
, aber das lag daran, dass sie in derurlpatterns
Kette referenziert wurden und das Werkzeug sie irgendwie erkannte. Behalten Sie dieses Verhalten im Auge.Das Problem war, dass die dem Modellpaket entsprechende Verzeichnisstruktur Unterpakete enthielt und alle
__init__.py
Dateien leer waren. Sie müssen explizit alle erforderlichen Klassen in jeden Unterordner und in die Modelle importieren,__init__.py
damit Django sie mit demmakemigrations
Tool abrufen kann.quelle
Versuchen Sie, Ihr Modell in admin.py zu registrieren. Hier ein Beispiel: - admin.site.register (YourModelHere)
Sie können Folgendes tun: - 1. admin.site.register (YourModelHere) # In admin.py 2. Laden Sie die Seite neu und versuchen Sie es erneut. 3. Drücken Sie STRG-S und speichern Sie. 4. Möglicherweise liegt ein Fehler vor. Überprüfen Sie insbesondere die Modelle .py und admin.py 5. Oder starten Sie am Ende einfach den Server neu
quelle
Ich hatte ein ähnliches Problem mit Django 3.0, laut Migrationsabschnitt in der offiziellen Dokumentation . Das Ausführen dieses Problems reichte aus, um meine Tabellenstruktur zu aktualisieren:
Die Ausgabe war jedoch immer dieselbe: "Keine Änderung festgestellt" für meine Modelle, nachdem ich das Skript "Makemigrations" ausgeführt habe. Ich hatte einen Syntaxfehler bei models.py bei dem Modell, das ich auf db aktualisieren wollte:
anstatt:
Um diesen dummen Fehler zu lösen, wurde die Migration mit diesen Befehlen ohne Probleme durchgeführt. Vielleicht hilft das jemandem.
quelle
Dies könnte hoffentlich jemand anderem helfen, da ich Stunden damit verbracht habe, dies zu verfolgen.
Wenn Sie eine Funktion innerhalb haben Ihrem Modell , wird der Wert entfernt. Im Nachhinein ziemlich offensichtlich, aber dennoch.
Also, wenn Sie so etwas haben:
In diesem Fall überschreibt die Funktion die obige Einstellung und macht sie für "unsichtbar"
makemigrations
.quelle
Das Beste, was Sie tun können, ist, die vorhandene Datenbank zu löschen. In meinem Fall habe ich die SQL-Datenbank phpMyAdmin verwendet, daher habe ich die erstellte Datenbank manuell gelöscht.
Nach dem Löschen: Ich erstelle eine Datenbank in PhpMyAdmin und füge keine Tabellen hinzu.
Führen Sie erneut die folgenden Befehle aus:
python manage.py makemigrations
python manage.py migrate
Nach diesen Befehlen : Sie können sehen, dass django automatisch andere erforderliche Tabellen in der Datenbank erstellt hat (ca. 10 Tabellen).
python manage.py makemigrations <app_name>
python manage.py migrate
Und zum Schluss: Nach den obigen Befehlen werden alle von Ihnen erstellten Modelle (Tabellen) direkt in die Datenbank importiert.
Hoffe das wird helfen.
quelle
Mein Problem mit diesem Fehler war, dass ich Folgendes aufgenommen hatte:
Innerhalb des Modells, für das ich eine Migration erstellen wollte.
quelle
Ich hatte ein anderes Problem beim Erstellen einer neuen App namens
deals
. Ich wollte die Modelle in dieser App trennen, also hatte ich 2 Modelldateien mit dem Namendeals.py
unddealers.py
. Beim Laufenpython manage.py makemigrations
bekam ich :No changes detected
.Ich ging voran und in das,
__init__.py
das sich in demselben Verzeichnis befindet, in dem sich meine Modelldateien befanden (Angebote und Händler), das ich getan habeUnd dann
makemigrations
funktionierte der Befehl.Es stellt sich heraus, dass
models.py
die Modelle nicht erkannt werden, wenn Sie die Modelle nirgendwo importieren ODER der Dateiname Ihres Modells nicht .Ein weiteres Problem, das mir passiert ist, ist die Art und Weise, wie ich die App geschrieben habe
settings.py
:Ich hatte:
Es sollte den Stammprojektordner enthalten haben:
quelle