ySJ
|
2.0/chapter10/#114 |
2010-04-19 12:45:32
|
在我们添加字段num_pages的时候,我们使用了 blank=True 和 null=True 选项。
|
|
ySJ
|
2.0/chapter10/#113 |
2010-04-19 11:29:28
|
这里有个微妙之处值得一提。
|
|
ySJ
|
2.0/chapter10/#99 |
2010-04-19 11:29:04
|
阅读第六章的“设置可选字段”以及本章下面的“添加非空列”小节以了解我们在这里添加<literal>blank=True</literal>和<literal>null=True</literal>的原因。)
|
|
ySJ
|
2.0/chapter10/#108 |
2010-04-19 11:28:18
|
接下来,我们要在开发环境上运行数据库客户端,如果是PostgreSQL,运行 psql,,然后,我执行如下语句。
|
|
ySJ
|
2.0/chapter10/#102 |
2010-04-19 11:26:51
|
语句的具体内容取决与你所使用的数据库, 大概是这个样子:
|
|
ySJ
|
2.0/chapter10/#101 |
2010-04-19 11:24:07
|
然后,我们运行命令manage.py sqlall books 来查看CREATE TABLE语句。
|
|
ySJ
|
2.0/chapter10/#99 |
2010-04-19 11:23:02
|
阅读第六章的“设置可选字段”以及下面的“添加非空列”小节以了解我们在这里添加<literal>blank=True</literal>和<literal>null=True</literal>的原因。)
|
|
ySJ
|
2.0/chapter10/#95 |
2010-04-19 11:16:05
|
让我们实践下,比如添加一个num_pages字段到第五章中Book模型。首先,我们会把开发环境中的模型改成如下形式:
|
|
ySJ
|
2.0/chapter10/#91 |
2010-04-19 11:14:23
|
如果你使用了某种版本控制工具,并且在第一步中,已经提交了你在开发环境上的修改,现在,可以在生产环境中更新你的代码了(例如,如果你使用Subversion,执行<literal>svn update</literal>。
|
|
ySJ
|
2.0/chapter10/#90 |
2010-04-19 11:12:26
|
将新的字段加入到模型中。
|
|
ySJ
|
2.0/chapter10/#88 |
2010-04-19 11:12:11
|
执行在开发环境步骤中,第三步的<literal>ALTER TABLE</literal>语句。
|
|
ySJ
|
2.0/chapter10/#84 |
2010-04-19 11:11:12
|
然后在你的产品服务器上再实施一遍这些步骤。
|
|
ySJ
|
2.0/chapter10/#82 |
2010-04-19 11:09:27
|
使用Python的<literal>manage.py shell</literal>,通过导入模型和选中表单(例如,
<literal>MyModel.objects.all()[:5]</literal> )来验证新的字段是否被正确的添加 ,如果一切顺利,所有的语句都不会报错。
|
|
ySJ
|
2.0/chapter10/#80 |
2010-04-19 11:07:30
|
开启你的数据库的交互命令界面(比如, <literal>psql</literal> 或<literal>mysql</literal> , 或者可以使用
<literal>manage.py dbshell</literal> )。 执行 <literal>ALTER TABLE</literal> 语句来添加新列。
|
|
ySJ
|
2.0/chapter10/#78 |
2010-04-19 11:05:29
|
注意为新字段的列定义。
|
|
ySJ
|
2.0/chapter10/#77 |
2010-04-19 11:02:06
|
运行 <literal>manage.py sqlall [yourapp]</literal> 来测试模型新的 <literal>CREATE TABLE</literal> 语句。
|
|
ySJ
|
2.0/chapter10/#75 |
2010-04-19 11:01:48
|
在你的模型里添加字段。
|
|
ySJ
|
2.0/chapter10/#73 |
2010-04-19 11:00:20
|
首先,进入开发环境(也就是说,不是在发布环境里):
|
|
ySJ
|
2.0/chapter10/#73 |
2010-04-19 11:00:14
|
首先,进入开发环境(也就是说 不是在发布环境里):
|
|
ySJ
|
2.0/chapter10/#71 |
2010-04-19 10:59:57
|
(你<emphasis>正</emphasis>使用的是测试/开发环境,对吧?)下面是具体的实施步骤。
|
|
ySJ
|
2.0/chapter10/#70 |
2010-04-19 10:59:01
|
这个鸡-蛋的问题的解决方法是在开发者环境里而不是发布环境里实现这个变化。
|
|
ySJ
|
2.0/chapter10/#68 |
2010-04-19 10:58:36
|
(注意:你并 <emphasis>不是非得使用</emphasis>与Django相同的SQL语句创建新的字段,但是这样做确实是一个好主意 ,它能让一切都保持同步。)
|
|
ySJ
|
2.0/chapter10/#65 |
2010-04-19 10:56:36
|
策略就是现在数据库里加入字段,然后同步Django的模型以包含新字段。
|
|
ySJ
|
2.0/chapter10/#65 |
2010-04-19 10:56:16
|
策略就是现在数据库里加入字段,然后同步Django的模型以添加新字段。
|
|
ySJ
|
2.0/chapter10/#67 |
2010-04-19 10:55:21
|
然而 这里有一个鸡生蛋蛋生鸡的问题 ,由于要想了解新增列的SQL语句,你需要使用Django的
<literal>manage.py sqlall</literal>命令进行查看 ,而这又需要字段已经在模型里存在了。
|
|
ySJ
|
2.0/chapter10/#64 |
2010-04-19 10:53:09
|
当要向一个产品设置表(或者说是model)添加一个字段的时候,要使用的技巧是利用Django不关心表里是否包含model里所没有的列的特性。
|
|
ySJ
|
2.0/chapter10/#56 |
2010-04-19 10:50:41
|
Django<emphasis>不</emphasis>关心数据库表中是否存在未在模型中定义的列。
|
|
ySJ
|
2.0/chapter10/#54 |
2010-04-19 10:49:34
|
当你第一次用Django的数据库API请求表中不存在的字段时会导致错误(就是说,它会在运行时出错,而不是编译时)。
|
|
ySJ
|
2.0/chapter10/#49 |
2010-04-19 10:47:42
|
这段将解释了具体怎么做:
|
|
ySJ
|
2.0/chapter10/#49 |
2010-04-19 10:42:31
|
这段将解释了怎么做。
|
|
ySJ
|
2.0/chapter10/#48 |
2010-04-19 10:42:09
|
如果你新增或修改数据模型里的字段,或是删除了一个数据模型,你需要手动在数据库里进行相应的修改。
|
|
ySJ
|
2.0/chapter10/#47 |
2010-04-19 10:36:16
|
在我们在第5章介绍 <literal>syncdb</literal> 这个命令时, 我们注意到 <literal>syncdb</literal>仅仅创建数据库里还没有的表,它 <emphasis>并不</emphasis> 对你数据模型的修改进行同步,也不处理数据模型的删除。
|
|
ySJ
|
2.0/chapter10/#43 |
2010-04-19 10:34:53
|
这里,就像使用 <literal>ForeignKey</literal>字段一样,属性名<literal>book_set</literal>是在数据模型(model)名后追加<literal>_set</literal>。
|
|
ySJ
|
2.0/chapter10/#39 |
2010-04-19 10:33:36
|
反向查询也可以。
|
|
ySJ
|
2.0/chapter10/#36 |
2010-04-19 10:33:18
|
例如,这里是如何查看书籍的作者:
|
|
ySJ
|
2.0/chapter10/#35 |
2010-04-19 10:31:30
|
多对多和外键工作方式相同,只不过我们处理的是<literal>QuerySet</literal>而不是模型实例。
|
|
ySJ
|
2.0/chapter10/#20 |
2010-04-19 10:20:27
|
当你获取一个<literal>ForeignKey</literal> 字段时,你会得到相关的数据模型对象。
|
|
ySJ
|
2.0/chapter10/#16 |
2010-04-19 10:19:48
|
但是,在之前有一件我们没提及到的是表现为<literal>ForeignKey</literal> 或 <literal>ManyToManyField</literal>的关联对象字段,它们的作用稍有不同。
|
|
ySJ
|
2.0/chapter10/#12 |
2010-04-19 10:12:49
|
如我们在第5章的讲解,获取数据库对象的特定字段的值只需直接使用属性。
|
|
ySJ
|
2.0/chapter10/#9 |
2010-04-19 10:07:55
|
先让我们回忆一下在第五章里的关于书本(book)的数据模型:
|
|
ySJ
|
2.0/chapter10/#5 |
2010-04-19 10:07:34
|
在这章里,我们将向你介绍Django在这方面的一些更高级功能。
|
|
xbwee
|
2.0/chapter17/#136 |
2010-04-19 00:26:54
|
<literal>request</literal>就是request对象,而<literal>response</literal>就是从视图中返回的response对象。
|
|
xbwee
|
2.0/chapter17/#133 |
2010-04-19 00:25:48
|
最明显的一个例子就是对request请求的HTML内容进行压缩。
|
|
xbwee
|
2.0/chapter17/#132 |
2010-04-19 00:24:15
|
在此,处理器可以修改response的内容。
|
|
xbwee
|
2.0/chapter17/#129 |
2010-04-19 00:23:21
|
process_response(self, request, response)
|
|
xbwee
|
2.0/chapter17/#126 |
2010-04-19 00:22:59
|
Django将立即返回这个<literal>HttpResponse</literal>对象。
|
|
xbwee
|
2.0/chapter17/#125 |
2010-04-19 00:22:17
|
如果返回的是<literal>HttpResponse</literal>对象,Django将不再调用任何其他中间件和视图。
|
|
xbwee
|
2.0/chapter17/#123 |
2010-04-19 00:20:57
|
如果返回<literal>None</literal>,Django将继续处理这个request,执行其他中间件和合适的试图函数。
|
|
xbwee
|
2.0/chapter17/#121 |
2010-04-19 00:19:48
|
跟<literal>process_request()</literal>一样,<literal>process_view()</literal>应该返回一个<literal>HttpResponse</literal>对象或者返回<literal>None</literal> |
|
xbwee
|
2.0/chapter17/#120 |
2010-04-19 00:18:35
|
40
|
|