首页 > 解决方案 > 在外部 .py 文件中使用 django 模型

问题描述

我正在尝试制作一个需要访问 django 应用程序数据库的电报机器人。

我想避免在views.py 中创建webservices 来管理内容,因为我不想创建一个API,只想让事情暂时分开,所以我需要访问电报机器人中的django ORM。

我已经在我的机器人主文件中导入了模型,但我收到了这条消息:

File "C:\Python37-32\lib\site-packages\django\apps\registry.py", line 135, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")

django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。

收到此消息后,我将应用程序添加到设置中,将此行添加到INSTALLED_APPS变量:'localadmin.apps.BotConfig'以及 apps.py 文件中的下一行:

class BotConfig(AppConfig):
    name = 'localadmin.bot'

请记住,有一个名为“bot”的文件夹,其中包含启动机器人的 main.py 文件。所以,我认为,一切都井井有条,但是,随着这些变化,我收到了下一条错误消息。

File "C:\Python37-32\lib\site-packages\django\apps\registry.py", line 135, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")

django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。

所以我想我的问题是,我需要使用适当的 django 应用程序来使用模型,但我不能这样做,因为我的应用程序是一个主要的电报机器人包装器。

我尝试过的另一个选择是将主包装电报机器人代码放在我的应用程序的 views.py 上,然后,当启动 django 服务器时,在单独的线程上启动电报机器人功能,但电报信号返回错误提示我说它只能在主线程上运行...

所以当我用尽想法的那一刻......

标签: pythondjangotelegrampython-telegram-bot

解决方案


正如文件所述

如果你正在使用 Django “独立”的组件——例如,编写一个 Python 脚本来加载一些 Django 模板并呈现它们,或者使用 ORM 来获取一些数据——除了配置设置之外,你还需要一个步骤.

在设置 DJANGO_SETTINGS_MODULE 或调用 configure() 之后,您需要调用 django.setup() 来加载设置并填充 Django 的应用程序注册表


推荐阅读