我正在尝试使用django-evolution来修改现有项目中的某些模型。现在,当我去syncdb时,它说我需要做一个'进化'。
当我尝试跑步时:
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'
谢谢,希望有人可以帮助我。
史蒂夫
答案 0 :(得分:2)
我已经解决了这个问题,我会发布任何遇到同一问题的人。
我意识到我的项目非常稳定。所以我备份了我的数据库并继续删除django_evolution使用的2个表。
然后我运行了一个syncdb来重新创建表。
这似乎有效,我能够做出我的进化。
答案 1 :(得分:2)
我将详细阐述史蒂夫的答案。
要查看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
如果您对上述命令提供的提示没有问题,请继续执行evolution:
python manage.py evolve --hint --execute
输入“是”确认执行。
所有旧表和相关数据都可以无缝运行。要检查类型:
python manage.py runserver