2015-07-03 71 views
0

有沒有辦法處理遷移?python django遷移問題

我一直在使用的版本的Django,其中,在models.py做任何更改後,我們需要運行以下命令1.8 -

python manage.py makemigrations 
python manage.py migrate 

很多時候,這給出了一個錯誤。而事實上,我必須重建項目,因爲沒有出路。

我也嘗試了下面的出路,但他們都沒有工作。

  • 刪除的文件夾遷移
  • 撤消更改model.py
  • 刪除與沖洗嘗試遷移文件夾
  • 裏面的文件,壓垮migratios

它的每一個時間顯示以下錯誤與一些未知文件的非常長的錯誤日誌。

帖子編輯:這裏是整個日誌

File "manage.py", line 10, in <module> 
execute_from_command_line(sys.argv) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/core/management/__init__.py", line 338, in execute_from_command_line 
utility.execute() 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/core/management/__init__.py", line 330, in execute 
self.fetch_command(subcommand).run_from_argv(self.argv) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/core/management/base.py", line 390, in run_from_argv 
self.execute(*args, **cmd_options) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/core/management/base.py", line 441, in execute 
output = self.handle(*args, **options) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/core/management/commands/migrate.py", line 221, in handle 
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/db/migrations/executor.py", line 110, in migrate 
self.apply_migration(states[migration], migration, fake=fake, fake_initial=fake_initial) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/db/migrations/executor.py", line 147, in apply_migration 
state = migration.apply(state, schema_editor) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/db/migrations/migration.py", line 115, in apply 
operation.database_forwards(self.app_label, schema_editor, old_state, project_state) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/db/migrations/operations/fields.py", line 62, in database_forwards 
field, 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/db/backends/sqlite3/schema.py", line 179, in add_field 
self._remake_table(model, create_fields=[field]) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/db/backends/sqlite3/schema.py", line 147, in _remake_table 
self.quote_name(model._meta.db_table), 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/db/backends/base/schema.py", line 111, in execute 
cursor.execute(sql, params) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/db/backends/utils.py", line 79, in execute 
return super(CursorDebugWrapper, self).execute(sql, params) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/db/backends/utils.py", line 64, in execute 
return self.cursor.execute(sql, params) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/db/utils.py", line 97, in __exit__ 
six.reraise(dj_exc_type, dj_exc_value, traceback) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/db/backends/utils.py", line 64, in execute 
return self.cursor.execute(sql, params) 
File "/Library/Python/2.7/site-packages/Django-1.8.2-py2.7.egg/django/db/backends/sqlite3/base.py", line 318, in execute 
return Database.Cursor.execute(self, query, params) 

django.db.utils.IntegrityError:NOT NULL約束失敗:zapp_post__new.specs_order_post_id

這裏是link到我的項目,目前正顯示出錯誤。您可以嘗試運行應用程序

在這種情況下應該做什麼?

+0

你需要提供更多的數據。請給予更多的堆棧。 –

+0

@SylvainBiehler,補充說。 – vhd

+0

數據庫中是否有任何現有數據?具體而言,'zapp_post__new.specs_order_post_id'已經包含任何空值? – J0HN

回答

0

下載你的代碼,刪除db.sqlite3,運行syncdb,一切工作正常。 既然你沒有在你的數據庫中的任何敏感數據我認爲這適合你。

這裏是爲未來的一點點額外的信息:

當修改遷移/ DB手動或當你遇到一個問題,遷移,你應該考慮這些事情:

  • 則不應刪除遷移文件夾
  • 遷移文件夾應始終包含__init__.py文件
  • 所有應用的遷移都存儲在django_migrations表中,因此如果刪除所有遷移文件並重新遷移遷移(即創建一個新的0001_initial.py),運行遷移不會做任何事情,因爲django認爲它已經應用
  • 有時刪除django_migrations表中的特定行並修改您的表結構(根據刪除的行)解決了這個問題,但您應該知道你在做什麼。

所以,最簡單的方法,當你遇到一個問題,遷移是delete一個在遷移文件夾中的所有文件(除__init__.py),刪除在django_migrations表中的所有行,其中應用= your_app_name,滴速您的應用程序的所有表,然後重建遷移並應用它們。

但是,如果你有敏感數據,你不能刪除分貝,它會變得更加複雜

+0

是的,明白了。感謝你的回答 ! – vhd