我可以将模型划分为django中的不同文件

时间:2012-12-05 07:59:25

标签: python django django-models

目前我的所有型号都在models.py中。我觉得非常混乱。 我可以使用base_models.py之类的单独文件,以便将我的主要模型放在那里,我不想触摸

对于视图也是相同的情况并放在单独的文件夹中而不是开发新的应用程序

5 个答案:

答案 0 :(得分:10)

是的,这是可行的。但它并不是特别漂亮:

使模型成为模块,因此您的目录结构如下所示:

- 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'

答案 1 :(得分:2)

所有acjohnson55都说,还有你需要在每个模型的Meta类中指定app_label属性。

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

你可以像这样分开模型文件:
-------型号/
-------------- init .py
-------------- usermodels.py
--------------othermodel.py

init .py中: ---------------来自usermodels import *
---------------来自othermodel import *
并在* models.py中添加META类:
--------类Meta:
-------------- app_label ='appName'

答案 4 :(得分:0)

我通常是这样做的:

# 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