【问题标题】:How to decide how to split up your Django project into apps如何决定如何将 Django 项目拆分为应用程序
【发布时间】:2011-02-04 18:35:42
【问题描述】:

我有一个使用 45 个表的 PHP/symfony 项目。我正在将其移植到 Python/Django。

多年来我一直坚信,您应该将项目拆分为一堆小文件,而不是几个大文件。据我了解,相信这并不是一件奇怪的事情。在 Rails 和 symfony 中,有一个每个文件一个模型的约定。然而,在 Django 中,似乎大多数开发人员将每个应用程序的所有模型都放在一个文件中。

如果您的应用程序都足够小,这对我来说很有意义。不过,对于大型应用程序来说,这对我来说没有意义,而且我拥有的至少是一个大型应用程序。

在我的项目使用的 45 个表中,有 35 个密切相关。我有一个从 CSV 文件导入数据的脚本。对于每个 CSV 文件中的每一行,我一举将 50-80 条数据保存到 30-35 个不同的表中。

也许我只是以错误的方式思考这个问题,但是当我几乎所有的表都密不可分地联系在一起时,将我的项目分成 6 或 7 个不同的应用程序对我来说似乎非常奇怪。当我触摸一张桌子时,我会触摸所有 35 张桌子。划定必须是任意的。那有什么意义呢?

如果我表现得有偏见,请原谅我,因为我确实有偏见。我在 symfony 中没有这个问题,我也不会在 Rails 中遇到这个问题。 (我选择 Django 是因为 GeoDjango 和 Python 的 GIS 功能。)

  • 在一个完美的世界中,每个文件都有一个模型。
  • 如果我尝试为每个文件创建一个模型,则会遇到循环引用问题。
  • 我可以通过将我的所有模型放在一个文件中来避免循环引用问题,但我觉得这是不对的。
  • 我可以通过将所有模型拆分为单独的应用程序来避免将它们放在同一个文件中,但是为了得到足够小的应用程序,我必须以任意(因此毫无意义)的方式分解我的项目。

我该怎么办?

【问题讨论】:

    标签: django


    【解决方案1】:

    如果每个文件有一个模型是您的完美答案,那么有一个应用程序可以解决这个问题。

    我从来没有在 80 个模型文件的规模上做过,但我当然可以为您指出另一个堆栈问题:
    About 20 models in 1 django app

    http://djangosnippets.org/snippets/1838/

    顺便问一下,您遇到了什么样的循环引用问题?如果它与 ForeignKey 定义,这里有一个方法... http://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey

    您也可以查看django.db.loading.get_model,但有些人可能对此不满意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多