2011-06-25 51 views
0

我是Django和MVT的新手,所以我很抱歉如果这是一个愚蠢的问题。我查看了一些类似的问题,但我正在寻找一些额外的清晰度,以及我是否试图做正确的事情。Django,模型和应用程序

下面是我正在处理的简化版本。假设我正在设计一个Django接口到一个预先存在的数据库。数据库是旧的,其他系统向它添加数据。 Django界面将是只读的。简单的结构与4的内容表:

  1. 小工具
  2. 创想(为简单起见,每个小部件都有一个造物主)
  3. 客户
  4. 订单(客户多到不少订单,订单很多,TO-很多小部件)

我开始创建一个名为“Widget”的Django应用程序,该应用程序显示Widget信息并为数据库中的所有表创建模型。这很好用,像/ widget/1234这样的URL我得到了ID为1234的Widget的信息,来自Creator表的信息以及它已经订购了多少次。

现在我想创建一个名为“Customer”的应用程序,它显示客户的信息(客户表中的数据,下达的订单,订购的小部件等)。

我做错了什么吗?是否应该有一个单独的“客户”应用程序?

如果确实有一个独立的“客户”应用程序是有意义的,我该如何处理这些模型?它们与“Widget”应用程序中使用的模型相同,因为它们处理同一数据库中的相同表格。我只是从其他应用程序导入?谢谢!

回答

3

不,你不需要为每个模型创建一个单独的应用程序。您应该为您的项目中的每个不同的功能创建一个应用程序。既然你只是在学习,你应该创建一个应用程序(使用你的项目名称)并使用它来学习。

至于模型,它们只是数据库中表的表示层,它使得它很容易,并处理很多与你的数据库交互相关的繁重工作。所以在你的情况下,你会为​​现有的数据库中的每个表创建一个模型:Widget,Creator(你可能想要考虑把它作为你的用户表的外键链接)Customer,Order。

您返回特定数据的方式是通过您的意见。因此,例如,要在您的示例中使用url获取特定窗口小部件的所有数据,url/widget/1234将指向您的views.py页面上的一个函数,您将在其中查询您的数据库以获取所需信息,然后发送它到你的模板。在您的例子查询看起来是这样的:

widget = Widget.objects.get(id=1234) 

需要注意的是,因为你有一个现有的数据库,你将不得不重写Django默认的数据库命名约定。你可以在这里阅读更多关于如何做到这一点:https://docs.djangoproject.com/en/dev/topics/db/models/

然而,我可以给你的最好的建议是将你自己的项目/应用程序搁置几天,并通过正式的Django教程和文档。特别是当你第一次学习,其令人难以置信的有据可查的,简单易学:

https://docs.djangoproject.com/en/dev/

+0

我有我的模型定义,完整的ForeignKeys等,多亏了“manage.py inspectdb”命令,也有添加几个db_column和related_name参数,但都很好。所以,我有/ widget/1234从多个表中拉出数据并使用模板输出。我想我不确定的事情是什么时候功能应该移到新的应用程序?即,如果到目前为止我的应用程序中有纯粹的“Widget”面向的页面(小部件搜索,小部件详细信息视图),并且我想要“面向客户”和“订购”的页面,那么应保留在同一个应用程序中或做一个新的?相同的型号。 – Raolin

+0

并感谢您的答案,顺便说一句! – Raolin

+0

我明白了,听起来你比我想象的要远得多。您应该创建新应用的标准不取决于页面的类型,因为该页面的视图很容易处理。相反,根据文档,应用程序是“执行某项操作的Web应用程序 - 例如,Weblog系统,公共记录数据库或简单的投票应用程序。”所以如果你有一个非常简单的应用程序,它看起来像你可能有,你真的只需要一个应用程序。 –

相关问题