django-evolution错误
我正在尝试使用django-evolution来修改一个已有项目中的一些模型。现在当我运行syncdb时,它提示我需要进行'evolve'。
当我尝试运行:
python manage.py evolve --hint --execute
我在终端中看到这个错误,但我还是新手,所以对这个错误的排查有点困难。
错误代码:
Traceback (most recent call last):
File "manage.py", line 11, in <module>
execute_manager(settings)
File "/home/steve/lib/python2.6/site-packages/django/core/management/__init__.py", line 361, in execute_manager
utility.execute()
File "/home/steve/lib/python2.6/site-packages/django/core/management/__init__.py", line 306, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/steve/lib/python2.6/site-packages/django/core/management/base.py", line 192, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/steve/lib/python2.6/site-packages/django/core/management/base.py", line 219, in execute
output = self.handle(*args, **options)
File "/var/sites/placeholder/placeholder/placeholder/apps/django_evolution/management/commands/evolve.py", line 87, in handle
hinted_evolution = diff.evolution()
File "/var/sites/placeholder/placeholder/placeholder/apps/django_evolution/diff.py", line 197, in evolution
changed_attrs[prop] = current_field_sig.get(prop, ATTRIBUTE_DEFAULTS[prop])
KeyError: 'field_type'
谢谢,希望有人能帮帮我。
史蒂夫
2 个回答
2
我来详细说明一下Steve的回答。
要查看django_evolution在你的项目数据库中创建的两个表,可以使用以下命令:
python manage.py sql django_evolution
不过,其实这个命令并不是必须的。你可以直接开始删除表或者重置表。需要注意的是,要让上面的命令有效,你的INSTALLED_APPS里必须有一个叫'django_evolution'的应用。我会提供一个在Django1.2.7上对我有效的命令。没错,我现在还在用1.2.7版本,因为到目前为止我没有理由去升级。解决这个问题的各种方法会在我回答的最后提供。你可以使用以下命令来重置:
python manage.py reset django_evolution
在提示重置的查询时,输入'yes'来确认。
接下来进行数据库同步,使用:
python manage.py syncdb
这个命令会告诉你需要进行演变。输入以下命令来进行演变:
python manage.py evolve --hint
如果你对上面命令提供的提示没问题,可以继续执行演变:
python manage.py evolve --hint --execute
通过输入'yes'来确认执行。
你所有的旧表和相关数据都会正常工作。要检查的话,可以输入:
python manage.py runserver
2
我解决了这个问题,想把我的经验分享给遇到同样问题的人。
我发现我在项目的一个非常稳定的阶段。所以我先备份了我的数据库,然后删除了两个和django_evolution相关的表。
接着我运行了syncdb命令,重新创建了这些表。
这样做似乎有效,我成功进行了我的数据演变。