一个Django应用中的大约20个模型

38 投票
6 回答
13348 浏览
提问于 2025-04-15 11:34

我开始为自己做一个本地应用,这个应用通过浏览器运行。最近我学习了django的教程,觉得用django可能比单纯用python要好。

不过有一个问题:我至少有20个模型,每个模型都会有很多功能。简单来说,这样会导致一个超级大的模型文件,可能视图文件也会很大。我该怎么把它们拆分开呢?

这些模型都是相关联的,所以我不能简单地把它们分成不同的应用,对吧?

6 个回答

16

这些模型都是相关联的,所以我不能简单地把它们分成不同的应用,对吧?

其实你可以把它们分成不同的应用。如果你想在一个应用中使用另一个应用里的模型,只需要像导入django.contrib的应用那样去导入它们就可以了。

77

这个需求其实挺常见的……我真不敢想象要在一个有一万行的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来导入模型。

31

“我有至少20个模型”——这可能不止一个Django“应用”,更像是一个包含几个小“应用”的Django“项目”。

我喜欢根据主题或领域来划分东西,每个主题有几个(1到5个)模型。这就形成了一个Django“应用”,也是一个很有用的可重用单位。

整个“项目”就是由这些应用组成的集合,展示了由不同部分构建起来的整体。

这样做还有助于项目管理,因为每个“应用”都可以变成一个冲刺,最后有一个发布。

撰写回答