【问题标题】:Using other file names than models.py for Django models?对 Django 模型使用除 models.py 之外的其他文件名?
【发布时间】:2016-10-15 16:33:52
【问题描述】:

在创建可重用应用程序时,我应该将我定义的所有模型放入单个文件 models.py 还是将模型分组到多个文件中,例如 topic1.pytopic2.py

请描述所有赞成和反对的理由。

【问题讨论】:

    标签: python django model


    【解决方案1】:

    models 子模块的特殊之处在于它会在初始化过程中的特定时间自动导入。此时也应导入所有模型。您不能更早地导入它们,并且稍后导入它们可能会导致错误。

    您可以在不同的模块中定义您的模型,但您应该始终将所有模型导入您的models.pymodels/__init__.py。例如:

    # models/topic1.py
    
    class Topic1(models.Model):
        ...
    
    # models/__init__.py
    
    from .topic1 import Topic1
    

    如果您将每个模型导入models.pymodels/__init__.py,这也允许您直接从该文件导入所有模型。在示例中,这意味着您可以从myapp.models 导入Topic1,而不仅仅是从myapp.models.topic1。这样,您可以在多个文件中组织您的模型,而无需在需要导入它们时记住每个模型的精确位置。

    【讨论】:

    • models/中的模型会自动导入吗? (空__init__.py
    • 只加载了models 模块。按照 python 的标准,这意味着实际上只加载了 __init__.py 文件。要加载models/ 目录中的其他文件,您需要单独导入它们。
    【解决方案2】:

    这取决于你定义了多少模型,如果你只有 1 到 5 个类模型,只需将它放在一个文件中,但如果你有 5 个以上的类模型,我建议将它放在多个文件中,

    但根据我的经验,如果模型放入多个文件,在导入内容时会变得有点麻烦,

    【讨论】:

    • 但它们都应该在models/ 目录中,以便 Django 找到它们,对吧?还是没有?
    • 是的,还有一件事你应该导入类模型而不是文件,例如,从 app.models.topic_one import ModelClass 注意:文件模块使用snake_case,类模型使用FirstCase,它会有所帮助你在进口东西时。
    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多