我有一些抛出的代码会导致syncdb 抛出错误(因为它会在创建表之前尝试访问模型)。
有没有办法阻止代码在syncdb上运行?就像是:
if not syncdb:
run_some_code()
谢谢 :)
编辑: 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 相关联,我有更好的地方放置此代码(这就是我遇到这个问题的方式),但它可以工作。
如您所见,您得到的错误是操作错误(在 sqlite 中),并且堆栈跟踪说明了“未找到表 django_cron_job”的内容
解决方案
最后,目标是在加载任何页面之前运行一些代码。
这可以通过在 urls.py 文件中执行它来完成,因为它必须在页面可以被提供之前被导入(显然)。
而且我能够删除那个丑陋的 try/except 块 :) 感谢上帝(和 S. Lott)