2011-07-15 9 views
1

私はdjango-evolutionを使用して、既存のプロジェクトからいくつかのモデルを修正しようとしています。私がsyncdbに行くとき、私は「進化する」必要があると言います。django-evolutionエラー

は、私が実行しようとすると:私は、端末でこのエラーを示しています

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

私はそれを解決している、と私は同じ問題に出くわす誰のために掲載します。

私は自分のプロジェクトで非常に安定していたことに気付きました。だから、私はdbのバックアップをとり、django_evolutionが動作する2つのテーブルを削除しました。

次に、テーブルを作成するためにsyncdbを実行しました。

これはうまくいくと思われ、私は進化をすることができました。

2

私はスティーブの答えを詳述します。

django_evolutionコマンドを使用して、プロジェクトのデータベース内の作成二つのテーブルを表示するには:上記のコマンド

python manage.py sql django_evolution 

は本当に必要ありません。すぐにテーブルを削除したり、テーブルをリセットしたりすることができます。上記のコマンドが機能するためには、あなたのINSTALLED_APPSに 'django_evolution'というアプリが必要です。私はDjango1.2.7で私のために働いた1つのコマンドを提供します。はい、まだバージョン1.2.7になっています。なぜなら、これまでのところ私はアップグレードする理由がなかったからです。私の答えの最後には、この問題を解決するさまざまな方法が用意されています。次のコマンドを使用してリセットします。

python manage.py reset django_evolution 

「はい」と入力してリセットクエリを受け入れます。このコマンドは、あなたが進化する必要があることを教えてくれます

python manage.py syncdb 

は今すぐに、データベースの同期を行います。進化が起こることのために、次のコマンドを入力します。

python manage.py evolve --hint --execute 

が「はい」と入力して実行を確認してください:あなたは上記のコマンドによって提供ヒントを使用して[OK]をしている場合

python manage.py evolve --hint 

、先に行くと進化を実行します。

古いテーブルと関連するデータはすべてシームレスに動作します。

python manage.py runserver 

How do I drop a table from SQLite3 in DJango?

:タイプを確認するには