syncdb がエラーをスローするコードがいくつかあります (テーブルが作成される前にモデルにアクセスしようとするため)。
コードが syncdb で実行されないようにする方法はありますか? 何かのようなもの:
if not syncdb:
run_some_code()
ありがとう :)
edit : PS - データベースにアクセスするコードに post_init シグナルを使用することを考えましたが、それは良い考えですか?
より詳しい情報
リクエストに応じて、ここにいくつかの詳細情報があります:)
たとえば、これに数回遭遇しました...私はdjango-cronをハッキングしていて、djangoをロードするときに既存のジョブがないことを確認する必要があると判断しました(インストールされているすべてのアプリでジョブを検索し、追加するため)とにかくロード中です)。
そこで、__init__.py
ファイルの先頭に次のコードを追加しました。
import sqlite3
try:
# Delete all the old jobs from the database so they don't interfere with this instance of django
oldJobs = models.Job.objects.all()
for oldJob in oldJobs:
oldJob.delete()
except sqlite3.OperationalError:
# When you do syncdb for the first time, the table isn't
# there yet and throws a nasty error... until now
pass
明らかな理由から、これはがらくたです。それはsqliteに関連付けられており、このコードを配置するためのより良い場所があります(これは私が問題に遭遇した方法です)が、機能します。
ご覧のとおり、表示されるエラーは Operational Error (in sqlite) であり、スタック トレースは「table django_cron_job not found」の行に沿って何かを示しています。
解決
最終的な目標は、ページが読み込まれる前にコードを実行することでした。
これは、urls.py ファイルで実行することで実現できます。これは、ページを提供する前にインポートする必要があるためです (明らかに)。
そして、私はその醜いtry/exceptブロックを削除することができました:)神に感謝します(そしてS. Lott)