database - programmingerror - Error de migración del sur: excepción de NoMigrations para django.contrib.auth
force migrate django (8)
He estado usando South en mi proyecto por un tiempo, pero recientemente hice una gran cantidad de desarrollo y cambié la máquina de desarrollo y creo que algo se desordenó en el proceso. El proyecto funciona bien, pero no puedo aplicar migraciones. Cada vez que trato de aplicar una migración, obtengo el siguiente rastreo:
danpalmer:pest Dan$ python manage.py migrate frontend
Traceback (most recent call last):
File "manage.py", line 11, in <module>
execute_manager(settings)
File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 362, in execute_manager
utility.execute()
File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 303, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 195, in run_from_argv
self.execute(*args, **options.__dict__)
File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 222, in execute
output = self.handle(*args, **options)
File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/management/commands/migrate.py", line 102, in handle
delete_ghosts = delete_ghosts,
File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/__init__.py", line 182, in migrate_app
applied = check_migration_histories(applied, delete_ghosts)
File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/__init__.py", line 85, in check_migration_histories
m = h.get_migration()
File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/models.py", line 34, in get_migration
return self.get_migrations().migration(self.migration)
File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/models.py", line 31, in get_migrations
return Migrations(self.app_name)
File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/base.py", line 60, in __call__
self.instances[app_label] = super(MigrationsMetaclass, self).__call__(app_label_to_app_module(app_label), **kwds)
File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/base.py", line 88, in __init__
self.set_application(application, force_creation, verbose_creation)
File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/base.py", line 159, in set_application
raise exceptions.NoMigrations(application)
south.exceptions.NoMigrations: Application ''<module ''django.contrib.auth'' from ''/Library/Python/2.6/site-packages/django/contrib/auth/__init__.pyc''>'' has no migrations.
No tengo tanta experiencia con South y no he encontrado este error antes. La única mención útil que puedo encontrar en línea sobre este error es para pre-0.7, creo, y estoy en South 0.7. Corrí ''easy_install -U South'' solo para asegurarme.
Dejando esto aquí para futuros googlers.
Recientemente me topé con estas excepciones con una de mis propias aplicaciones hoy, no con una contrib.
Después de rascarme la cabeza, noté que de alguna manera el archivo ...
app/migrations/__init__.py
... se ha eliminado, lo que significa que Python no puede importar el directorio como un módulo, etc., etc.
Puede realizar migraciones en módulos incorporados, y definitivamente tiene sentido para migraciones de datos, por ejemplo, truncando todos los nombres de usuario, eliminando correos electrónicos no válidos, etc.
En el caso de un usuario de django.contrib.auth.models, simplemente use: orm [''auth.User'']
Recibí el mismo error, pero no para un módulo django, sino para un módulo que era parte de mi virtualenv. No entendí cómo South pudo haber realizado una migración para ese módulo, ya que realmente no tenía ninguna migración. Entonces recordé que había copiado la base de datos de un env de prueba que se suponía que era lo mismo. Pero resultó que el otro env tenía una versión ligeramente diferente del módulo que tenía una migración. Terminé eliminando la fila ofensiva de la historia de la migración del sur (ya que de todos modos era un env de prueba).
Resolví el problema.
Obviamente, no puedes usar South para hacer las migraciones de las aplicaciones que forman parte de Django, como ''auth'', así que no sabía por qué lo intentaba.
Me di cuenta de que durante un tiempo tuve otra aplicación dentro de mi proyecto llamada auth. Debo haber intentado migrar esto en algún momento antes de cambiarle el nombre y por lo tanto lo estropeé todo.
Eliminé las entradas del historial de migración de la base de datos para esa aplicación y todo estaba bien.
Simplemente me encontré con esto después de cambiar de versión de aplicaciones y ramas, y decidí eliminar la aplicación que ahora no tenía migraciones de la tabla south_migrationhistory
./manage.py dbshell
mysql> SELECT * FROM south_migrationhistory WHERE app_name = ''social_auth'';
104 | social_auth | 0001_initial...
105 | social_auth | 0002_auto__add_unique_nonce...
mysql> DELETE FROM south_migrationhistory WHERE app_name = ''social_auth'';
Query OK, 2 rows affected (0.00 sec)
También tuve el mismo problema, sin embargo, esto sucedió con la aplicación raíz. Descubrí que esto se debía a un models.py
vacío en la raíz de mi proyecto de un desarrollo anterior. Sospecho que este problema puede surgir también para aplicaciones de proyectos.
También tuve el mismo problema, y al final solucioné esto eliminando todas las filas de la tabla south_migrationhistory y ejecuté el siguiente comando desde la terminal.
python manage.py reset south
Esta answer explica cómo restablecer la historia de la migración sur.
Editar:
A partir de Django 1.5, el comando de reset
no funcionará. En su lugar tienes que usar el flush
.
python manage.py flush
Para entender más acerca de lo que hará la descarga, lea esta respuesta de .
Tuve un problema similar con django.contrib.admin que no me permitía ejecutar mis migraciones. Lo resolví deshabilitando django.contrib.admin en settings.INSTALLED_APPS