【发布时间】:2012-12-05 07:59:25
【问题描述】:
目前我所有的模型都在 models.py 中。变得非常混乱。
我可以拥有像base_models.py 这样的单独文件,这样我就可以把我不想碰的主要模型放在那里
视图也是同样的情况,放在单独的文件夹中,而不是开发一个新的应用程序
【问题讨论】:
标签: python django django-models
目前我所有的模型都在 models.py 中。变得非常混乱。
我可以拥有像base_models.py 这样的单独文件,这样我就可以把我不想碰的主要模型放在那里
视图也是同样的情况,放在单独的文件夹中,而不是开发一个新的应用程序
【问题讨论】:
标签: python django django-models
是的,这是可行的。虽然不是特别漂亮:
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 所说的一切,加上您需要在每个模型的 Meta 类中指定 app_label 属性这一事实。
github 上一个实际示例的链接: https://github.com/stefanfoulis/django-filer/tree/develop/filer/models
【讨论】:
您可以像这样分离模型文件:
--------型号/
-------------- 初始化.py
-------------- usermodels.py
--------------othermodel.py
在 init.py:
---------------从用户模型导入 *
---------------从其他模型导入 *
并在 *models.py 中,添加 META 类:
--------类元:
--------------app_label = 'appName'
【讨论】:
是的,只需创建一个名为 models 的文件夹,然后在该文件夹中放置所有分离的模型文件。您需要将一个名为__init__.py 的文件放在models 文件夹中,以便将其视为models 模块。在__init__.py 中,使用from ... import ... 将您想要的名称直接放在yourapp.models 中,否则您必须将它们导入为yourapp.models.base_model,或者您使用的任何子模块名称。
此外,在每个模型中,您必须添加一个名为 app_label = 'yourapp' 的元属性,以确保您的模型被识别为应用程序的一部分。
【讨论】:
这是我通常的做法:
# 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
【讨论】: