【问题标题】:Can i divide the models in different files in django我可以在 django 的不同文件中划分模型吗
【发布时间】:2012-12-05 07:59:25
【问题描述】:

目前我所有的模型都在 models.py 中。变得非常混乱。 我可以拥有像base_models.py 这样的单独文件,这样我就可以把我不想碰的主要模型放在那里

视图也是同样的情况,放在单独的文件夹中,而不是开发一个新的应用程序

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    是的,这是可行的。虽然不是特别漂亮:

    make 建模一个模块,所以你的目录结构如下所示:

    - models
    |- __init__.py
    |- some_model.py
    |- some_other_model.py
    |- ...
    

    现在,神奇之处在于__init__.py 和模型中的一些额外内容。 __init__.py:

    from some_model import SomeModel
    from some_other_model import SomeOtherModel
    
    __all__ = [ 
        'SomeModel',
        'SomeOtherModel',
    ]
    

    some_model.py:

    class SomeModel(models.Model):
        class Meta(object):
            app_label = 'yourapplabel'
            db_table = 'yourapplabel_somemodel'
    

    【讨论】:

    • 感谢下划线acjohnson55,早上有点早
    • from .some_model import SomeModel // 对我来说,当我使用 .(dot) 时它可以工作
    • 那你如何处理循环导入?
    【解决方案2】:

    acjohnson55 所说的一切,加上您需要在每个模型的 Meta 类中指定 app_label 属性这一事实。

    github 上一个实际示例的链接: https://github.com/stefanfoulis/django-filer/tree/develop/filer/models

    【讨论】:

      【解决方案3】:

      您可以像这样分离模型文件:
      --------型号/
      -------------- 初始化.py
      -------------- usermodels.py
      --------------othermodel.py

      init.py:
      ---------------从用户模型导入 *
      ---------------从其他模型导入 *
      并在 *models.py 中,添加 META 类:
      --------类元:
      --------------app_label = 'appName'

      【讨论】:

        【解决方案4】:

        是的,只需创建一个名为 models 的文件夹,然后在该文件夹中放置所有分离的模型文件。您需要将一个名为__init__.py 的文件放在models 文件夹中,以便将其视为models 模块。在__init__.py 中,使用from ... import ... 将您想要的名称直接放在yourapp.models 中,否则您必须将它们导入为yourapp.models.base_model,或者您使用的任何子模块名称。

        此外,在每个模型中,您必须添加一个名为 app_label = 'yourapp' 的元属性,以确保您的模型被识别为应用程序的一部分。

        【讨论】:

          【解决方案5】:

          这是我通常的做法:

          # Folder structure:
          #==================
          # models/
          #   __init__.py
          #   products.py
          #   stocks.py
          
          # In init.py (don't forget the period before model file name)
          #===========
          from .products import Product
          from .stocks import Stock
          
          __all__ = [
              'Product',
              'Stock',
          ]
          
          # And run "py manage.py makemigrations" and "py manage.py migrate" as normal
          

          【讨论】:

            猜你喜欢
            • 2018-05-27
            • 2015-05-02
            • 2012-06-28
            • 1970-01-01
            • 1970-01-01
            • 2023-03-03
            • 1970-01-01
            • 2013-08-13
            • 1970-01-01
            相关资源
            最近更新 更多