8

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

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

4

5 回答 5

11

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

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

- 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'
于 2012-12-05T08:21:35.640 回答
2

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

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

于 2012-12-05T08:25:52.360 回答
0

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

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

于 2012-12-05T08:23:11.233 回答
0

您可以像这样分隔模型文件:
-------models/
-------------- init .py
-------------- usermodels .py
--------------其他模型.py

init .py 中:
---------------from usermodels import *
---------------from othermodel import *
和 *models. py , 添加 META 类:
--------class Meta:
--------------app_label = 'appName'

于 2012-12-05T08:25:53.353 回答
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
于 2021-04-27T07:17:01.710 回答