You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django多层模型目录下如何简化__init__.py中的批量导入代码

解决方案

你提到的短导入写法是可以实现的,之前的写法不生效是因为Python默认情况下from 包 import *不会自动导入子模块的内容,只有在包的__init__.py里定义了__all__列表指定导出对象后才会生效,具体操作如下:

实现步骤

  1. 在子模块目录下新增__init__.py声明要导出的模型
    首先在app/models/accounts和app/models/social两个目录下分别创建__init__.py文件,通过__all__变量指定当前包对外暴露的模型类:
    • app/models/accounts/__init__.py内容:
    from .user import User
    from .profile import Profile
    
    __all__ = ["User", "Profile"]
    
    • app/models/social/__init__.py内容:
    from .facebook import Facebook
    from .twitter import Twitter
    from .linkedin import LinkedIn
    
    __all__ = ["Facebook", "Twitter", "LinkedIn"]
    
  2. 修改根models目录的__init__.py
    现在你可以直接用你想要的批量导入写法替换原有长代码,功能完全和之前一致:
    from .accounts import *
    from .social import *
    

注意事项

  • 不同子包导出的模型类名不要重复,否则后导入的类会覆盖先导入的
  • 该结构完全兼容Django的模型自动发现逻辑,迁移、admin注册、外键关联等操作都和原有写法没有差异
  • 如果后续新增了模型,只需要在对应子包的__init__.py的__all__列表里添加新类名即可

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:15:03