在Django中,从模块级别运行查询,例如劝阻models.py
是有充分理由的。
不幸的是,我不清楚如何一般地阻止它,这意味着Murphey定律会发生它。
说我有类似下面的东西(但是对于违规函数的名称稍微不那么明显)...我怎样才能防止这种情况(即难以理解)?
# models.py
class MyModel(models.Model):
somefield = models.IntegerField(choices=get_something_from_db())
请注意,即使您使用Django 1.8的可调用选项,也始终执行上述操作,所有选项都会进行模型验证评估。
答案 0 :(得分:0)
我自己没有尝试过,但你可以用几个信号做到这一点。
首先,您可以通过侦听连接创建的信号来阻止数据库连接:
https://docs.djangoproject.com/en/1.8/ref/signals/#connection-created
通过收听此信号(https://docs.djangoproject.com/en/1.8/topics/signals/#listening-to-signals) 您可以引发异常以防止您的代码实际执行任何操作。
其次,您可以通过收听请求启动信号来判断您是否收到了请求: https://docs.djangoproject.com/en/1.8/ref/signals/#request-started
在此信号的接收器上,您可以删除“连接创建”信号的侦听器,以便现在可以创建数据库连接。 最后一步,将侦听器移除到“请求已启动”信号(https://docs.djangoproject.com/en/1.8/topics/signals/#disconnecting-signals),这样您就不会对此代码的其余部分产生任何影响。
希望这有帮助!