Исключение 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 ответов


о через пять минут после публикации этого я придумал решение. Думал, что я поделюсь им, если у кого-то есть эта проблема в будущем.

  1. удалить все миграции для всех ваших приложений
  2. Run python manage.py makemigrations <appname> для всех приложений
  3. перенос 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),
    ),
]

Если есть

дублировать имя столбца

вы можете исправить это путем дублировать имя столбца

для меня, как только произошла ошибка, не проблема, а серия вопросы。。просто успокойтесь и исправьте это, изменив неправильные файлы миграции, это лучший способ, чем удалить все миграции и повторно синхронизировать данные БД.