一个Django应用中的大约20个模型
我开始为自己做一个本地应用,这个应用通过浏览器运行。最近我学习了django的教程,觉得用django可能比单纯用python要好。
不过有一个问题:我至少有20个模型,每个模型都会有很多功能。简单来说,这样会导致一个超级大的模型文件,可能视图文件也会很大。我该怎么把它们拆分开呢?
这些模型都是相关联的,所以我不能简单地把它们分成不同的应用,对吧?
6 个回答
这些模型都是相关联的,所以我不能简单地把它们分成不同的应用,对吧?
其实你可以把它们分成不同的应用。如果你想在一个应用中使用另一个应用里的模型,只需要像导入django.contrib的应用那样去导入它们就可以了。
这个需求其实挺常见的……我真不敢想象要在一个有一万行的models.py文件里翻来翻去 :-)
你可以把models.py
文件(还有views.py
文件)拆分成一个包。这样的话,你的项目结构会变成这样:
/my_proj
/myapp
/models
__init__.py
person.py
__init__.py
文件的作用是把这个文件夹变成一个包。唯一需要注意的是,要确保为你的模型定义一个内部的Meta
类,这个类要指明模型的app_label,否则Django在构建你的数据库结构时会遇到问题:
class Person(models.Model):
name = models.CharField(max_length=128)
class Meta:
app_label = 'myapp'
完成这些后,在你的__init__.py
文件中导入模型,这样Django和同步数据库的工具就能找到它了:
from person import Person
这样你仍然可以使用from myapp.models import Person
来导入模型。
“我有至少20个模型”——这可能不止一个Django“应用”,更像是一个包含几个小“应用”的Django“项目”。
我喜欢根据主题或领域来划分东西,每个主题有几个(1到5个)模型。这就形成了一个Django“应用”,也是一个很有用的可重用单位。
整个“项目”就是由这些应用组成的集合,展示了由不同部分构建起来的整体。
这样做还有助于项目管理,因为每个“应用”都可以变成一个冲刺,最后有一个发布。