在外部.py文件中使用Django模型

问题描述

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

我想避免在views.py中创建Web服务来管理内容,因为我不想创建API,而只是想让事情暂时分开,所以我需要访问电报bot中的django ORM

我已将模型导入到我的机器人主文件中,但收到以下消息:

std::unordered_map

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

收到此消息后,我会将应用添加到设置中,并将以下行添加File "C:\python37-32\lib\site-packages\django\apps\registry.py",line 135,in check_apps_ready raise AppRegistryNotReady("Apps aren't loaded yet.") 变量:INSTALLED_APPS和apps.py文件的下一行:

'localadmin.apps.BotConfig'

请记住,有一个名为“ bot”的文件夹,其中包含启动bot的main.py文件。 因此,我认为一切都井然有序,但是,随着这一更改,我得到了下一条错误消息。

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

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

所以我想我的问题是,我需要使用适当的django应用程序来使用模型,但是由于我的应用程序是电报机器人的主要包装程序,所以我无法这样做。

我尝试过的另一个选项是将主包装电报bot代码放在应用程序的views.py上,然后在启动django服务器时,在单独的线程上启动电报bot函数,但电报信号返回一条错误消息告诉我它只能在主线程上运行...

所以,在我耗尽创意的那一刻...

解决方法

documentation所述

如果您使用的是Django“独立”组件,例如, 编写Python脚本来加载一些Django模板并进行渲染 它们,或使用ORM来获取一些数据–还有一个步骤 除了配置设置之外,您还需要。

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