1

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'

ありがとう、うまくいけば誰かが私を助けてくれます。

スティーブ

4

2 に答える 2

2

私はそれを解決しました、そして私は同じ問題に遭遇する人のために投稿します。

私は自分のプロジェクトの非常に安定した部分にいることに気づきました。そこで、dbのバックアップを作成し、django_evolutionが機能する2つのテーブルを削除しました。

次に、syncdbを実行してテーブルを再度作成しました。

これはうまくいったようで、私は自分の進化をすることができました。

于 2011-07-18T19:16:07.500 に答える
2

スティーブの答えについて詳しく説明します。

django_evolution がプロジェクト データベース内に作成する 2 つのテーブルを表示するには、次のコマンドを使用します。

python manage.py sql django_evolution

上記のコマンドは実際には必要ありません。すぐにテーブルの削除またはテーブルのリセットに進むことができます。上記のコマンドが機能するには、INSTALLED_APPS に「django_evolution」というアプリが必要になることに注意してください。Django1.2.7 でうまくいったコマンドを 1 つ提供します。はい、まだバージョン 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

DJango で SQLite3 からテーブルを削除するにはどうすればよいですか?

于 2013-05-09T08:25:01.640 に答える