Django中与Model有关的三个特性

使用Django也差不多有一段时间了,而且也在项目中使用了,刚开始时代码写的很烂,现在看起来非常不爽。我想说一下关于model部分的问题,希望能给初学者一些建议吧。

这里有三个关键部分:Managermodel方法Signals。Django是一种非常快速的开发框架,有时候文档还没看完,就能写好多东西,但如果看了文档,那么可以以更少的代码完成相同的功能。

根据Manager的文档说明,Manager用于操作表级别的数据,可以用来对表中的多个项进行操作,在Manager中可以做任何事情,所以再看了Signals后,感觉功能有重叠,等下我会说明为什么重叠。当默认Manager提示的功能不能满足你的需要的时候,那么你就扩展它吧,而且model还可以有多个Manager。

Model方法是行级别的方法,用于对行进行操作,比如:当ModelA是ModelB的外键时,那么可以通过ModelA的Model方法来创建ModelB。Model中的方法最封装成不需要传参数的方法,这样就可以直接在模版中调用了,这样大大减少了代码量。当然Manager也可以这样做,通过for标记遍历Querysets,然后直接调用Model中的方法。

Signals这个东西是非常有用的一个机制,但这个东西还没有正式的文档。所以知名度不是很高,但还是有一个Wiki页面说明了这个东西使用。其实Signals在Django中有大量的应用,比如:在初次syncdb的使用,会让你创建超级管理员,在这里就有一个Signal,post_syncdb,当系统执行syncdb的时候,会调用已监听的方法,通过这个方法实现创建超级管理员向导。系统自带许多Signal,其中有个post_save,这个Signal用于监听Model对象保存后,执行的操作,比如:在现在中都会添加一个UserProfile来扩展User Model,但自带的添加用户方法,并不会添加UserProfile,所以可以使用post_save来监听User Model,当创建User之后,再创建UserProfile,这样不必修改Django源代码就可以使用。当然你也可以使用Manager来完成这个操作,这就是我说的重复部分,怎么用那就看自己的了。

分享到: 更多

《Django中与Model有关的三个特性》有1个想法

  1. 想请教个问题,数据库系统,比如说mysql, 表格的字段创建时候可以对字段标注个解释说明,标注一下此字段的用途,即字段的comment,那么,我通过django models创建表格时,怎么对字段(column)进行标注呢?谢谢回答

评论已关闭。