2016-01-08 4 views
7

Использование django 1.9. Поэтому я пытаюсь перенести мою базу данных, но я сталкиваюсь с этой ошибкой. Я потратил много часов на то, чтобы устранить это и не имел успеха. Я могу загрузить больше своего кода, если это необходимо. Вот ошибка:Исключение Django FieldDoesNotExist при переносе

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 

Большое спасибо!

+0

Сколько у вас приложений?И вот исключение «FieldDoesNotExist: у пользователя нет поля с именем« Нет ». Можете ли вы написать модель« Пользователь », если вы измените это. Или любой код, где вы работаете с 'User' –

+0

Спасибо за комментарий, но у меня есть решение! – ThankYOU

+0

рад за вас :) –

ответ

2

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

  1. Удалить все миграции для всех приложений
  2. Run для всех приложений
  3. Затем мигрируют python manage.py migrate

Тогда все должно быть прекрасно

Почувствуйте, как полный идиот в потратили так много часов, пытаясь исправить это, ну ладно!

+4

mmm это может сработать для вас, но вы не можете удалить все миграции для своего проекта. – BlaShadow

+1

Очень плохое решение! Если скрипты миграции уже находятся в prod, это будет плохо или приведет к дальнейшим изменениям. – DhiaTN

+1

Я предполагаю, что вы новичок в Django. В вашей базе данных есть таблица «django_migrations», которая отслеживает миграции, выполненные в вашей базе данных. Именно поэтому django знает, какие миграции являются новыми и их необходимо выполнить. Если вы удалите свои миграции и создадите новые, это может быть не проблема на вашем локальном компьютере, так как вы можете легко стереть свою базу данных и создать новую. Но если у вас есть работающий сервер с live db, вам также нужно исправить таблицу 'django_migration', что в основном является плохой практикой. Короче говоря, найдите исправление вместо очистки миграций. – AliBZ

1

Для всех, кто знаком с Django, легко найти, что миграция связана с проводной проблемой в командной работе. Env.cause Потеря людей изменяет модели и выполняет миграцию. Кто-то сделал это неправильно и вызвал проблему. Если она находится в dev env, удаление миграции и повторный исходный шаг не проблема.

, но если он находится в производстве env.You не может удалить все миграции. Если вы это сделаете, вам нужно обеспечить, чтобы новый db имел данные о происхождении. Это займет много времени, чем исправить ошибки в ошибках ,

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

python manage.py migrate

, если произошла ошибка, найти поле или таблицы вызывают проблему, а затем изменить неправильную миграцию файл.

Если есть

django.db.utils.OperationalError: (1050, "Table 'sometable' already exists

Django Table already exist исправит вашу проблему.

Если есть

django.core.exceptions.FieldDoesNotExist: User has no field named None

это означает, что вы должны удалить migrats.AddField или AlterFields.

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

если есть

Duplicate column name

вы можете исправить это Duplicate column name

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

Смежные вопросы