Como dice el título, parece que no puedo hacer que las migraciones funcionen.
La aplicación originalmente era inferior a 1.6, por lo que entiendo que las migraciones no estarán allí inicialmente, y de hecho si ejecuto python manage.py migrate
me sale:
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 hago un cambio en algún modelo myapp
, todavía dice no inmigrado, como se esperaba.
Pero si corro python manage.py makemigrations myapp
me sale:
No changes detected in app 'myapp'
No parece importar qué o cómo ejecuto el comando, nunca detecta que la aplicación tenga cambios, ni agrega ningún archivo de migración a la aplicación.
¿Hay alguna forma de forzar una aplicación a las migraciones y esencialmente decir "Esta es mi base para trabajar" o algo así? ¿O me estoy perdiendo algo?
Mi base de datos es PostgreSQL si eso ayuda.
python
django
django-1.7
django-migrations
TyrantWave
fuente
fuente
Respuestas:
Si está cambiando de una aplicación existente que creó en django 1.6, entonces necesita hacer un paso previo (como descubrí) enumerado en la documentación:
La documentación no hace obvio que necesita agregar la etiqueta de la aplicación al comando, ya que lo primero que le dice que haga es
python manage.py makemigrations
qué fallará. La migración inicial se realiza cuando crea su aplicación en la versión 1.7, pero si viniera de 1.6 no se habría llevado a cabo. Consulte 'Agregar migración a aplicaciones' en la documentación para obtener más detalles.fuente
python manage.py makemigrations APP_LABEL
para cada uno?./manage.py startapp
, pero todavía tenía que mencionar explícitamente la etiquetaEsto puede ocurrir debido a las siguientes razones:
INSTALLED_APPS
listasettings.py
(debe agregar el nombre de la aplicación o la ruta punteada a la subclase de AppConfig en apps.py en la carpeta de la aplicación, dependiendo de la versión de django que esté usando). Consulte la documentación: INSTALLED_APPSmigrations
carpeta dentro de esas aplicaciones. (Solución: solo cree esa carpeta).__init__.py
archivo dentro de lamigrations
carpeta de esas aplicaciones. (Solución: simplemente cree un archivo vacío con el nombre __init__.py )__init__.py
archivo dentro de la carpeta de la aplicación. (Solución: simplemente cree un archivo vacío con el nombre __init__.py )models.py
archivo en la aplicaciónmodels.py
no heredadjango.db.models.Model
models.py
Nota: Un error común es agregar una
migrations
carpeta en el.gitignore
archivo. Cuando se clona desde un repositorio remoto, faltanmigrations
carpetas y / o__init__.py
archivos en el repositorio local. Esto causa un problema.Sugiero gitignore los archivos de migración agregando las siguientes líneas al
.gitignore
archivofuente
__init__.py
carpeta junto con las migraciones.You don't have __init__.py file inside migrations folder of those apps. (Solution: Just create an empty file with name __init__.py)
y fue causado al agregar los archivos a.gitignore
__init__.py
archivo python 3.3 se requiere dentro de un directorio para que sea tratado como un paquete python. ver estoOk, parece que me perdí un paso obvio, pero publicar esto en caso de que alguien más haga lo mismo.
Al actualizar a 1.7, mis modelos quedaron sin administrar (
managed = False
): los tenía comoTrue
antes, pero parece que se revirtieron.Al eliminar esa línea (de forma predeterminada a Verdadero) y luego ejecutarla
makemigrations
inmediatamente, creó un módulo de migración y ahora está funcionando.makemigrations
no funcionará en tablas no administradas (lo cual es obvio en retrospectiva)fuente
manage.py inspectdb
agrega manage = False! en caso de importar bases de datos heredadas, debe ajustarlo cuidadosamente.app_label
sea igualMi solución no estaba cubierta aquí, así que la estoy publicando. Lo había estado usando
syncdb
para un proyecto, solo para ponerlo en marcha. Luego, cuando traté de comenzar a usar las migraciones de Django, al principio las fingió y luego dijo que estaba 'OK', pero no estaba sucediendo nada en la base de datos.Mi solución fue simplemente eliminar todos los archivos de migración para mi aplicación, así como los registros de la base de datos para las migraciones de la aplicación en la
django_migrations
tabla.Luego acabo de hacer una migración inicial con:
./manage.py makemigrations my_app
seguido por:
./manage.py migrate my_app
Ahora puedo hacer migraciones sin problemas.
fuente
__init.py__
, no funcionará.)De acuerdo con @furins. Si todo parece estar en orden y surge este problema, verifique si hay algún método de propiedad con el mismo título que el atributo que está intentando agregar en la clase Modelo.
fuente
Es un error estúpido, pero tener una coma adicional al final de la línea de declaración de campo en la clase de modelo hace que la línea no tenga efecto.
Sucede cuando copia y pega el def. de la migración, que se define como una matriz.
Aunque tal vez esto ayudaría a alguien :-)
fuente
Tal vez sea demasiado tarde, pero ¿trataste de tener una
migrations
carpeta en tu aplicación con un__init__.py
archivo?fuente
Quizás esto ayude a alguien. Estaba usando una aplicación anidada. project.appname y en realidad tenía project y project.appname en INSTALLED_APPS. Eliminar el proyecto de INSTALLED_APPS permitió detectar los cambios.
fuente
La respuesta está en esta publicación de stackoverflow, por cdvv7788 Migraciones en Django 1.7
Estaba teniendo exactamente el mismo problema y hacer lo anterior funcionó perfectamente.
Había movido mi aplicación django a cloud9 y por alguna razón nunca capté la migración inicial.
fuente
Lo siguiente funcionó para mí:
Trabajó para mí: Python 3.4, Django 1.10
fuente
Las personas como yo a las que no les gustan las migraciones pueden usar los pasos a continuación.
python manage.py makemigrations app_label
para la migración inicial.python manage.py migrate
para crear tablas antes de realizar cambios.Si confundió alguno de estos pasos, lea los archivos de migración. Cámbielos para corregir su esquema o elimine los archivos no deseados, pero no olvide cambiar la parte de dependencias del próximo archivo de migración;)
Espero que esto ayude a alguien en el futuro.
fuente
Desea verificar
settings.py
en laINSTALLED_APPS
lista y asegurarse de que todas las aplicaciones con modelos estén enumeradas allí.La ejecución
makemigrations
en la carpeta del proyecto significa que buscará actualizar todas las tablas relacionadas con todas las aplicaciones incluidassettings.py
para el proyecto. Una vez que lo incluya,makemigrations
incluirá automáticamente la aplicación (esto ahorra mucho trabajo para que no tenga que ejecutarmakemigrations app_name
cada aplicación en su proyecto / sitio).fuente
En caso de que tenga un campo específico que no sea identificado por makemigrations: verifique dos veces si tiene una propiedad con el mismo nombre.
ejemplo:
la propiedad "sobrescribirá" la definición del campo para que los cambios no sean identificados por
makemigrations
fuente
hourly_rate = models.DecimalField
(falta el '()' final y simplemente falló en silencio.Asegúrese de que su modelo no lo sea
abstract
. Realmente cometí ese error y me tomó un tiempo, así que pensé en publicarlo.fuente
Agregar esta respuesta porque solo este método me ayudó.
Eliminé la
migrations
carpeta ejecutarmakemigrations
ymigrate
.Todavía decía: no hay migraciones para aplicar.
Fui a la
migrate
carpeta y abrí el último archivo creado,comenté la migración que quería (se detectó e ingresó allí)
y ejecuté
migrate
nuevamente.Esto básicamente edita el archivo de migraciones manualmente.
Haga esto solo si comprende el contenido del archivo.
fuente
¿Lo usó
schemamigration my_app --initial
después de cambiar el nombre de la carpeta de migración anterior? Intentalo. Podría funcionar. Si no es así, intente recrear la base de datos y realice syncdb + migrate. A mí me funcionó ...fuente
schemamigration
existe un comando , ¿creo que eso es parte del Sur? Actualmente no tengo una carpeta de migración. Eliminar mimodels.py
y volver a ejecutarinspectdb
no parecía hacer nada.schemamigration
era del surmakemigrations
Es su reemplazo.makemigrations --empty
Tuve el mismo problema Asegúrese de que las clases que haya definido en models.py, debe tener que heredar la clase models.Model.
fuente
Tuve el mismo problema con tener que hacer makemigrations dos veces y todo tipo de comportamientos extraños. Resultó que la raíz del problema era que estaba usando una función para establecer fechas predeterminadas en mis modelos, por lo que las migraciones detectaban un cambio cada vez que ejecutaba makemigrations. La respuesta a esta pregunta me puso en el camino correcto: evite hacer migraciones para volver a crear el campo de fecha
fuente
Recientemente actualicé Django de 1.6 a 1.8 y tenía pocas aplicaciones y migraciones para ellos. Utilicé el sur y
schemamigrations
para crear migraciones en Django 1.6, que se eliminó en Django 1.8.Cuando agregué nuevos modelos después de la actualización, el
makemigrations
comando no detectó ningún cambio. Y luego probé la solución sugerida por @drojf (primera respuesta), funcionó bien, pero no pudo aplicar la migración inicial falsa (python manage.py --fake-initial
). Estaba haciendo esto ya que mis tablas (tablas antiguas) ya estaban creadas.Finalmente, esto funcionó para mí, eliminé nuevos modelos (o cambios de modelos) de models.py y luego tuve que eliminar (o cambiar el nombre de la copia de seguridad) la carpeta de migraciones de todas las aplicaciones y ejecutar python
manage.py
makemigrations para todas las aplicaciones, luego lo hicepython manage.py migrate --fake-initial
. Funcionó como por arte de magia. Una vez que se crea la migración inicial para todas las aplicaciones y la migración inicial falsa, se agregan nuevos modelos y se sigue el proceso regularmakemigrations
y se migra en esa aplicación. Los cambios se detectaron ahora y todo salió bien.Solo pensé en compartirlo aquí, si alguien enfrenta el mismo problema (tener
schemamigrations
sur para sus aplicaciones), podría ayudarlos :)fuente
Tal vez eso pueda ayudar a alguien, tuve el mismo problema.
Ya he creado dos tablas con la clase serializador y las vistas. Entonces, cuando quería actualizar, tuve este error.
Seguí estos pasos:
.\manage.py makemigrations app
.\manage.py migrate
models.py
1
y2
.models.py
5
.Si está trabajando con Pycharm, la historia local es muy útil.
fuente
Quizás esto ayude a alguien.
He eliminado mi
models.py
y esperabamakemigrations
crearDeleteModel
declaraciones.¡Recuerda eliminar
*.pyc
archivos!fuente
Las migraciones rastrean los cambios en la base de datos, por lo que si está cambiando de no administrado a administrado, deberá asegurarse de que su tabla de base de datos esté actualizada en relación con el modelo con el que está tratando.
Si todavía está en modo de desarrollo, personalmente decidí eliminar los archivos de migración en mi IDE, así como en la tabla django_migrations relacionada con mi modelo y volver a ejecutar el comando anterior.
RECUERDE: si tiene una migración que termina con _001 en su IDE y _003 en su base de datos. Django solo verá si tiene una migración que termine con _004 para actualizar algo.
Los 2 (migraciones de código y db) están vinculados y funcionan en tándem.
Feliz codificación
fuente
fuente
Agregué esta respuesta porque ninguna de las otras disponibles anteriormente funcionó para mí.
En mi caso, sucedía algo aún más extraño ( versión Django 1.7 ), en mi models.py tenía una línea "extra" al final de mi archivo (era una línea en blanco) y cuando ejecuté el
python manage.py makemigrations
comando el resultado fue: "no se detectaron cambios".Para solucionar esto, eliminé esta "línea en blanco" que estaba al final de mi archivo models.py y ejecuté el comando nuevamente, ¡todo se solucionó y se detectaron todos los cambios realizados en models.py !
fuente
Es posible que deba simular las migraciones iniciales con el siguiente comando
fuente
Primero, esta solución es aplicable a aquellos que enfrentan el mismo problema durante la implementación en el servidor heroku, yo estaba enfrentando el mismo problema.
Para implementar, hay un paso obligatorio que es agregar django_heroku.settings (locals ()) en el archivo settings.py.
Cambios: cuando cambié la línea anterior a django_heroku.settings (locales (), bases de datos = Falso), funcionó a la perfección.
fuente
En mi caso, necesitaba agregar mi modelo al archivo _ init _.py de la carpeta de modelos donde se definió mi modelo:
fuente
Agregando mi 2c, ya que ninguna de estas soluciones funcionó para mí, pero esto hizo ...
Acababa de ejecutar
manage.py squashmigrations
y eliminar las migraciones antiguas (tanto los archivos como las líneas en la tabla de la base de datos django.migrations).Esto dejó una línea como esta en el último archivo de migración:
Esto aparentemente confundió a Django y causó un comportamiento extraño: la ejecución
manage.py makemigrations my_app
recrearía la migración inicial como si no existiera ninguno. ¡Eliminar lareplaces...
línea solucionó el problema!fuente
python manage.py makemigrations accounts Migraciones para 'cuentas': accounts \ migrations \ 0001_initial.py - Crear modelo Cliente - Crear modelo Etiqueta - Crear modelo Producto - Crear modelo Pedido
Nota: aquí "cuentas" es el nombre de mi aplicación
fuente