Changelog

全名 (Descending) Unsort 页面 提交时间 (Ascending) Unsort 内容 注释 ...
ySJ 2.0/chapter05/#351 2010-04-12 11:11:39 信不信由你,这些就是我们需要编写的通过Django存取基本数据的所有代码。
ySJ 2.0/chapter05/#354 2010-04-12 11:13:27 属性名就是字段名,它的类型(例如 <literal>CharField</literal> )相当于数据库的字段类型 (例如 <literal>varchar</literal> )。例如, <literal>Publisher</literal> 模块等同于下面这张表(用PostgreSQL的 <literal>CREATE TABLE</literal> 语法描述):
ySJ 2.0/chapter05/#365 2010-04-12 11:16:27 最后需要注意的是,我们并没有显式地为这些模型定义任何主键。
ySJ 2.0/chapter05/#366 2010-04-12 11:19:40 除非你单独指明,否则Django会自动为每个模型生成一个自增长的整数主键字段<literal></literal>每个Django模型都要求有单独的主键。
ySJ 2.0/chapter05/#372 2010-04-12 11:20:57 <literal>books</literal> app 添加到配置文件的已安装应用列表中即可完成此步骤。
ySJ 2.0/chapter05/#386 2010-04-12 11:25:22 这是为了避免忘了加逗号,而且也没什么坏处。)
ySJ 2.0/chapter05/#388 2010-04-12 11:26:31 <literal>'mysite.books'</literal>指示我们正在编写的<literal>books</literal> app。
ySJ 2.0/chapter05/#389 2010-04-12 11:27:30 <literal>INSTALLED_APPS</literal> 中的每个app都使用 Python的路径描述,包的路径,用小数点“.”区分。
ySJ 2.0/chapter05/#389 2010-04-12 11:27:44 <literal>INSTALLED_APPS</literal> 中的每个app都使用 Python的路径描述,包的路径,用小数点“.”间隔。
ySJ 2.0/chapter05/#392 2010-04-12 11:28:23 首先,用下面的命令验证模型的有效性:
ySJ 2.0/chapter05/#396 2010-04-12 11:29:16 如果一切正常,你会看到 <literal>0 errors found</literal> 消息。如果出错,请检查你输入的模型代码。
ySJ 2.0/chapter05/#397 2010-04-12 12:56:49 错误输出会给出非常有用的错误信息来帮助你修正你的模型。
ySJ 2.0/chapter05/#401 2010-04-12 12:59:06 模型确认没问题了,运行下面的命令来生成 <literal>CREATE TABLE</literal> 语句(如果你使用的是Unix,那么可以启用语法高亮):
ySJ 2.0/chapter05/#405 2010-04-12 13:00:16 和你运行 <literal>manage.py startapp</literal> 中的一样。输出如下:
ySJ 2.0/chapter05/#405 2010-04-12 13:00:40 和你运行 <literal>manage.py startapp</literal> 中的一样。执行之后,输出如下:
ySJ 2.0/chapter05/#410 2010-04-12 13:06:06 自动生成的表名是app名称( <literal>books</literal> )和模型的小写名称 ( <literal>publisher</literal> , <literal>book</literal> , <literal>author</literal> )的组合。你可以参考附录B重写这个规则。
ySJ 2.0/chapter05/#416 2010-04-12 13:08:54 你猜对了,这个同样是可以自定义的。
ySJ 2.0/chapter05/#420 2010-04-12 13:14:14 这些 <literal>CREATE TABLE</literal> 语句会根据你的数据库而作调整,这样象数据库特定的一些字段例如:<literal></literal>(MySQL),<literal></literal>(PostgreSQL),<literal></literal>(SQLite),都会自动生成。
ySJ 2.0/chapter05/#421 2010-04-12 13:15:00 同样的,字段名称也是自动处理(例如单引号还好是双引号)。
ySJ 2.0/chapter05/#422 2010-04-12 13:15:50 例子中的输出是基于PostgreSQL语法的。
ySJ 2.0/chapter05/#424 2010-04-12 13:17:24 <literal>sqlall</literal> 命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来,这样你可以看到Django究竟会做些什么。
ySJ 2.0/chapter05/#425 2010-04-12 13:18:59 如果你想这么做的话,你可以把那些SQL语句复制到你的数据库客户端执行,或者通过Unix管道直接进行操作(例如,<literal> python manager.py sqlall books | psql mydb</literal> )。不过,Django提供了一种更为简易的提交SQL语句至数据库的方法:
ySJ 2.0/chapter05/#434 2010-04-12 13:23:52 需要注意的是, <literal>syncdb</literal><emphasis>不能</emphasis>将模型的修改或删除同步到数据库;如果你修改或删除了一个模型,并想把它提交到数据库,<literal>syncdb</literal>并不会做出任何处理。
ySJ 2.0/chapter05/#435 2010-04-12 13:27:24 (更多内容请查看本章最后的“修改数据库的架构”一段。)
ySJ 2.0/chapter05/#437 2010-04-12 13:30:44 如果你再次运行 <literal>python manage.py syncdb</literal> ,什么也没发生,因为你没有添加新的模型或者 添加新的app。因此,运行<literal>python manage.py syncdb</literal>总是安全的,因为它不会重复执行SQL语句。
ySJ 2.0/chapter05/#440 2010-04-12 13:33:03 你可以手动启动命令行客户端(例如,执行PostgreSQL的<literal> psql</literal> 命令),也可以执行 <literal> python manage.py dbshell</literal> ,这个命令将依据<literal> DATABASE_SERVER</literal> 的里设置自动检测使用哪种命令行客户端。
ySJ 2.0/chapter05/#472 2010-04-12 13:39:43 当然,你肯定想执行更多的Django数据库API试试看,不过,还是让我们先解决一点烦人的小问题。
ySJ 2.0/chapter05/#479 2010-04-12 13:41:31 我们可以简单解决这个问题,只需要为<literal>Publisher</literal> 对象添加一个方法 <literal>__unicode__()</literal>
ySJ 2.0/chapter05/#480 2010-04-12 13:42:44 <literal>__unicode__()</literal> 方法告诉Python如何将对象以unicode的方式显示出来。
ySJ 2.0/chapter05/#476 2010-04-12 13:44:20 当我们打印整个publisher列表时,我们没有得到想要的有用信息,无法把<literal></literal>对象区分开来:
ySJ 2.0/chapter05/#481 2010-04-12 13:45:54 为以上三个模型添加<literal>__unicode__()</literal>方法后,就可以看到效果了:
ySJ 2.0/chapter05/#484 2010-04-12 13:47:34 就象你看到的一样, <literal>__unicode__()</literal> 方法可以进行任何处理来返回对一个对象的字符串表示。
ySJ 2.0/chapter05/#485 2010-04-12 13:56:32 <literal>Publisher</literal><literal>Book</literal>对象的<literal>__unicode__()</literal>方法简单地返回各自的名称和标题,<literal>Author</literal>对象的<literal>__unicode__()</literal>方法则稍微复杂一些,它将<literal>first_name</literal><literal>last_name</literal>字段值以空格连接后再返回。
ySJ 2.0/chapter05/#495 2010-04-12 14:37:20 你可以认为unicode对象就是一个Python字符串,它可以处理上百万不同类别的字符——从古老版本的Latin字符到非Latin字符,再到曲折的引用和艰涩的符号。
ySJ 2.0/chapter05/#497 2010-04-12 14:38:16 普通的python字符串是经过<emphasis>编码</emphasis>的,意思就是它们使用了某种编码方式(如ASCII,ISO-8859-1或者UTF-8)来编码。
ySJ 2.0/chapter05/#498 2010-04-12 14:39:46 如果你把奇特的字符(其它任何超出标准128个如0-9和A-Z之类的ASCII字符)保存在一个普通的Python字符串里,你一定要跟踪你的字符串是用什么编码的,否则这些奇特的字符可能会在显示或者打印的时候出现乱码。
ySJ 2.0/chapter05/#512 2010-04-12 14:47:49 这是一个很好的起点:http://www.joelonsoftware.com/articles/Unicode.html。
ySJ 2.0/chapter05/#514 2010-04-12 14:50:18 为了让我们的修改生效,先退出Python Shell,然后再次运行 <literal>python manage.py shell</literal> 进入。(这是保证代码修改生效的最简单方法。)现在<literal> Publisher</literal>对象列表容易理解多了。
ySJ 2.0/chapter05/#519 2010-04-12 14:51:07 最后, <literal>__unicode__()</literal> 也是一个很好的例子来演示我们怎么添加 <emphasis>行为</emphasis> 到模型里。
ySJ 2.0/chapter05/#547 2010-04-12 14:56:20 这个操作有可能引起竞态条件,这取决于你的应用程序。
ySJ 2.0/chapter05/#546 2010-04-12 14:57:42 注意,并不是只更新修改过的那个字段,所有的字段都会被更新。
ySJ 2.0/chapter05/#548 2010-04-12 15:01:37 请参阅后面的“更新多个对象”小节以了解如何执行这种轻量的修改(只修改对象的部分字段)。
ySJ 2.0/chapter05/#548 2010-04-12 15:01:55 请参阅后面的“更新多个对象”小节以了解如何实现这种轻量的修改(只修改对象的部分字段)。
ySJ 2.0/chapter05/#565 2010-04-12 15:03:39 明言胜于暗示。
ySJ 2.0/chapter05/#563 2010-04-12 15:04:55 设计的时候就是这样:
ySJ 2.0/chapter05/#574 2010-04-12 15:13:00 然后,是<literal>objects</literal>属性。
ySJ 2.0/chapter05/#580 2010-04-12 15:14:34 最后,还有 <literal>all()</literal> 方法。这个方法返回返回数据库中所有的行。
ySJ 2.0/chapter05/#581 2010-04-12 15:16:09 尽管这个对象 看起来 象一个列表(list),它实际是一个 QuerySet 对象, 这个对象是数据库中一些记录的集合。
ySJ 2.0/chapter05/#580 2010-04-12 15:16:45 最后,还有 <literal>all()</literal> 方法。这个方法返回返回数据库中所有的记录。
ySJ 2.0/chapter05/#582 2010-04-12 15:17:25 附录C将详细描述QuerySet。
« < 3 4 5 6 7 8 9 > » 96 pages