Исключение Django FieldDoesNotExist при миграции
использование django 1.9. Поэтому я пытаюсь перенести свою базу данных, однако я сталкиваюсь с этой ошибкой. Я потратил много часов, пытаясь устранить это и не имел успеха. Я могу загрузить больше кода, если это необходимо. Вот ошибка:
C:UsersJamesDesktopJamesWorkdjangohomepgcom>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:UsersJamesAppDataLocalProgramsPythonPython35libsite-packagesdjangodbmodelsoptions.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:UsersJamesAppDataLocalProgramsPythonPython35libsite-packagesdjangocoremanagement__init__.py", line 350, in execute_from_command_line
utility.execute()
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangocoremanagement__init__.py", line 342, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangocoremanagementbase.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangocoremanagementbase.py", line 399, in execute
output = self.handle(*args, **options)
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangocoremanagementcommandsmigrate.py", line 200, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangodbmigrationsexecutor.py", line 92, in migrate
self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangodbmigrationsexecutor.py", line 121, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangodbmigrationsexecutor.py", line 198, in apply_migration
state = migration.apply(state, schema_editor)
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangodbmigrationsmigration.py", line 123, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangodbmigrationsoperationsfields.py", line 201, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangodbbackendsbaseschema.py", line 482, in alter_field
old_db_params, new_db_params, strict)
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangodbbackendssqlite3schema.py", line 245, in _alter_field
self._remake_table(model, alter_fields=[(old_field, new_field)])
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangodbbackendssqlite3schema.py", line 181, in _remake_table
self.create_model(temp_model)
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangodbbackendsbaseschema.py", line 250, in create_model
to_column = field.remote_field.model._meta.get_field(field.remote_field.field_name).column
File "C:UsersJamesAppDataLocalProgramsPythonPython35libsite-packages
djangodbmodelsoptions.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
заранее большое спасибо!
2 ответов
о через пять минут после публикации этого я придумал решение. Думал, что я поделюсь им, если у кого-то есть эта проблема в будущем.
- удалить все миграции для всех ваших приложений
- Run
python manage.py makemigrations <appname>
для всех приложений - перенос
python manage.py migrate
тогда все должно быть просто замечательно
чувствую себя полным идиотом, чтобы потратить так много часов, пытаясь исправить это, ну хорошо!
для тех, кто новичок в Django, легко найти, что миграция имеет проводную проблему в командной работе env.причиной потери людей являются модификация моделей и миграция, кто-то сделал это неправильно и вызвал проблему.Если это в dev env, удалите миграции и повторите начальный шаг, это не проблема.
но если он находится в производстве env.Вы не можете удалить все переносы.Если вы это сделаете, вам нужно убедиться,что новая БД имеет данные исходных.Это займет много времени, чем исправить миграции багги.
поэтому я думаю, что правильный способ исправить проблему-проверить руководство по файлу миграции при запуске
python manage.py migrate
Если произошла ошибка, найдите поле или таблицы, вызывающие проблему, а затем измените неправильный файл миграции.
Если есть
Джанго.децибел.а utils.OperationalError: (1050, "таблица 'sometable' уже существует
таблица Django уже существует будет исправить вашу проблема.
Если есть
Джанго.ядро.исключения.FieldDoesNotExist: у пользователя нет поля с именем None
это означает, что вы должны удалить migrats.Добавитьформы или AlterFields.
operations = [
migrations.AddField(
model_name='user',
name='user_current_plan_id',
field=models.IntegerField(blank=True, null=True),
),
]
Если есть
дублировать имя столбца
вы можете исправить это путем дублировать имя столбца
для меня, как только произошла ошибка, не проблема, а серия вопросы。。просто успокойтесь и исправьте это, изменив неправильные файлы миграции, это лучший способ, чем удалить все миграции и повторно синхронизировать данные БД.