加载__init__.py时,有没有办法自动导入我文件夹中的所有模型



在我的Python 3.9,Django 3.2项目中,我有这个通用的文件夹结构

- manage.py
+ cbapp
+ models
- __init__.py
- vendor.py
- user_preferences.py

init.py文件中,我列出了所有的模型条目。。。

from .vendor import Vendor
from .user_preferences import UserPreferences
...

每个型号类别,例如供应商,都有这种通用结构

from django.db import models
class Vendor(models.Model): 
...

每次添加新模型时,我都必须在init.py文件中添加一行。我有没有办法写init.py文件,这样它就可以自动导入我添加到模型目录中的新文件?

您想要的是一些奇特的动态导入,比如这些。

如果您的模型名称在模块名称上总是相同的模式,那么init.py中的以下代码可能会起作用:

import os, glob
path = os.path.dirname(__file__)
modules = [os.path.basename(f)[:-3] for f in glob.glob(path + "/*.py")
if not os.path.basename(f).startswith('_')]
stripped_path = os.path.relpath(path).replace('/', '.')
imports = {}
for module in modules:
model_name = module.title().replace("_", "")
imports[model_name] = getattr(__import__(stripped_path + "." + module, fromlist=[model_name]), model_name)
print(imports)
globals().update(imports)

最新更新