如何决定如何将Django项目拆分为应用程序

时间:2011-02-04 18:35:43

标签: django

我有一个用PHP / symfony编写的项目,它使用了45个表。我正在将它移植到Python / Django。

我坚持多年来一直认为你应该将你的项目分成一堆小文件而不是一些大文件。据我所知,相信并不奇怪。在Rails和symfony中,有一个单模型的文件约定。然而,在Django中,似乎大多数开发人员将每个应用程序的模型都放在一个文件中。

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

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

也许我只是想错误的方式,但是当我的项目几乎所有表格都密不可分时,将我的项目分成6或7个不同的应用程序似乎非常奇怪。当我触摸一张桌子时,我触摸了所有35张桌子。划分必须是任意的。那会是什么意思?

如果我有偏见,请原谅我,因为我当然有偏见。我在symfony中没有这个问题,我不会在Rails中使用它。 (因为GeoDjango和Python的GIS功能,我选择了Django。)

  • 在一个完美的世界里,每个文件我会有一个模型。
  • 如果我尝试为每个文件设置一个模型,则会出现循环引用问题。
  • 我可以通过将所有模型放在一个文件中来避免循环引用问题,但这对我来说是错误的。
  • 我可以通过将所有模型分成不同的应用程序来避免将所有模型放在同一个文件中,但为了最终得到足够小的应用程序,我必须以任意(因而无意义)的方式分解我的项目。

我该怎么办?

1 个答案:

答案 0 :(得分:4)

如果每个文件只有一个模型将是您的完美答案,那就有一个应用程序。

我从未在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,但有些人可能会对此感到不满。