【发布时间】:2015-11-07 17:34:07
【问题描述】:
只要数据库在 Django 中准备好,我就需要做一些事情。具体来说,我需要对 db 中的值进行一些计算并将结果填充到缓存中。
从 django 1.7 开始,application registry 可以很容易地知道应用程序或模型何时可以使用。你可以写:
from django.apps import apps
if apps.ready:
do_some_stuff()
但是我发现模型准备好了并不代表可以查询数据库。 Django 文档说:
尽管您可以如上所述访问模型类,但请避免 在您的 ready() 实现中与数据库交互
我试图连接到post_migrate 事件。如果我正在重建数据库(例如启动测试套件),它可以工作,但如果我只是使用现有的数据库(例如使用runserver),则不会。
有没有办法知道数据库在 Django >= 1.7 中是否完全可用?
【问题讨论】:
-
我想正确理解您的用例(特别是为什么运行服务器很重要)。您正在为迁移后任务和启动任务填充缓存,并在何时寻找合适的挂钩。这些是繁重的缓存任务(或棘手的原子性),因此您希望确保只执行一次。这是对问题的公平重述吗?
标签: django database postgresql django-orm django-signals