sqlmigrate migrations migracion manage make hacer datos python django sqlite3 migration

python - migrations - Excepción de Django FieldDoesNotExist al migrar



python manage py make migrations (2)

Usando django 1.9. Así que estoy intentando migrar mi base de datos, sin embargo, me encuentro con este error. He pasado muchas horas tratando de solucionar este problema y no he tenido éxito. Puedo subir más de mi código si es necesario. Aquí está el error:

C:/Users/James/Desktop/James/Work/django/homepgcom>python manage.py migrate Operations to perform: Apply all migrations: auth, interface, sessions, admin, contenttypes, userprofile Running migrations: Rendering model states... DONE Applying interface.0002_auto_20160107_1635...Traceback (most recent call last): File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/django/db/models/options.py", line 580, in get_field return self.fields_map[field_name] KeyError: None During handling of the above exception, another exception occurred: Traceback (most recent call last): File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line utility.execute() File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/core/management/__init__.py", line 342, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/core/management/base.py", line 348, in run_from_argv self.execute(*args, **cmd_options) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/core/management/base.py", line 399, in execute output = self.handle(*args, **options) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/core/management/commands/migrate.py", line 200, in handle executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/db/migrations/executor.py", line 92, in migrate self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/db/migrations/executor.py", line 121, in _migrate_all_forwards state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/db/migrations/executor.py", line 198, in apply_migration state = migration.apply(state, schema_editor) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/db/migrations/migration.py", line 123, in apply operation.database_forwards(self.app_label, schema_editor, old_state, project_state) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/db/migrations/operations/fields.py", line 201, in database_forwards schema_editor.alter_field(from_model, from_field, to_field) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/db/backends/base/schema.py", line 482, in alter_field old_db_params, new_db_params, strict) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/db/backends/sqlite3/schema.py", line 245, in _alter_field self._remake_table(model, alter_fields=[(old_field, new_field)]) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/db/backends/sqlite3/schema.py", line 181, in _remake_table self.create_model(temp_model) File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/db/backends/base/schema.py", line 250, in create_model to_column = field.remote_field.model._meta.get_field(field.remote_field.field_name).column File "C:/Users/James/AppData/Local/Programs/Python/Python35/lib/site-packages/ django/db/models/options.py", line 582, in get_field raise FieldDoesNotExist(''%s has no field named %r'' % (self.object_name, field_name)) django.core.exceptions.FieldDoesNotExist: User has no field named None

¡Muchas gracias de antemano!


Alrededor de cinco minutos después de publicar esto, se me ocurrió una resolución. Pensé que lo compartiría en caso de que alguien tenga este problema en el futuro.

  1. Eliminar todas las migraciones para todas tus aplicaciones
  2. Ejecute python manage.py makemigrations <appname> para todas las aplicaciones
  3. A continuación, migre python manage.py migrate

Entonces todo debería estar bien

Me siento como un idiota total por haber pasado tantas horas tratando de arreglar esto, ¡oh bien!


Para cualquier persona nueva en Django, es fácil encontrar que la migración ha provocado problemas en un entorno de trabajo en equipo. Las personas que pierden modifican los modelos y realizan las migraciones. Alguien lo hizo incorrectamente y causa el problema. Si está en dev env, elimine las migraciones y rehacer el paso inicial no es un problema.

pero si está en entorno de producción, no puede eliminar todas las migraciones. Si lo hace, debe asegurarse de que el nuevo db tenga los datos de los de origen. Esto llevará mucho tiempo antes que corregir las migraciones erróneas.

Así que supongo que la forma correcta de solucionar el problema es consultar el manual del archivo de migraciones cuando se ejecuta

python manage.py migrate

si ocurrió el error, encuentre que el campo o las tablas causan el problema, luego modifique el archivo de migración incorrecto.

Si hay un

django.db.utils.OperationalError: (1050, "Table ''sometable'' ya existe

Django Table ya existe solucionará tu problema.

Si hay un

django.core.exceptions.FieldDoesNotExist: el usuario no tiene un campo con nombre Ninguno

significa que tienes que eliminar los migrats.AddField o AlterFields.

operations = [ migrations.AddField( model_name=''user'', name=''user_current_plan_id'', field=models.IntegerField(blank=True, null=True), ), ]

si hay un

Nombre de columna duplicado

puedes arreglarlo por nombre de columna duplicado

Para mí, una vez que se produjo el error, no es un problema sino una serie de preguntas ... simplemente tranquilízate y corrígelo modificando los archivos de migraciones incorrectos es una mejor manera que eliminar todas las migraciones y resincronizar los datos de db.