1.7中的django apps和models.py - 究竟发生了什么变化?

时间:2014-08-17 19:29:45

标签: django django-models django-apps

Django 1.7对应用程序的工作原理进行了一些明显的重大改变

https://docs.djangoproject.com/en/dev/releases/1.7/#app-loading-refactor

这些发行说明似乎表示您可以在models.py之外定义模型,我们甚至不需要在应用内部使用models.py(或models/__init__.py)。

我误解了这个吗?如果没有,有人可以解释我们定义模型的位置,如果它们不在models.py中,那么django如何找到并加载它们?

1 个答案:

答案 0 :(得分:1)

您仍应在models.py中定义模型。

在1.7中的应用重构之前,没有统一的API来声明有关您应用的元数据。特别是,Django通过查找models.py文件确定是否有应用程序的方式。这不是一个优雅的系统,特别是当你认为某些应用程序甚至没有模型时(例如,应用程序可能只提供管理命令)。

既然存在AppConfig API,就不再需要存在models.py。但是,它仍然是定义模型的自然和默认位置。

django如何找到并加载它们?

来自documentation:"您必须在应用的models.pymodels/__init__.py中定义或导入所有模型。"

这表明以下做法:如果您没有任何模型,请不要包含models.py。如果您有一个文件的模型,请将它们放在models.py中。如果您有一堆模型并希望将它们分散到多个文件中,请将这些文件放在models子模块中,然后将其内容导入models/__init__.py