2015-07-03 70 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