全部博文(2065)
分类: Python/Ruby
2009-04-28 12:03:01
在当前的工程中,需要有两个Models模型,分别对应List表和Item表,用来存储新闻的分类和新闻的条目,每个Item项都会有一个外键来 标记文章的归属分类。下面打开Django创建的models.py文件,按照文件注释中提示的模块添加位置,编写如下的代码:
class List(models.Model):
title = models.CharField(maxlength=250, unique=True)
def __str__(self):
return self.title
class Meta:
ordering = ['title']
class Admin:
pass
上面这段Python代码定义了存储新闻分类的List数据表,上述模型中的定义会被Django转换成与数据库直接交互的结构化查询语言来建立数 据表,即创建一个名为List的表格,表格内的两个字段分别是Django自动生成的整型主键id和最大宽度为250个字符的VARCHAR类型字段 title,并且在title字段上定义了唯一性约束,来保证新闻分类不会有完全相同的名称。
在List类文 件里还定义了函数__str__(),作用是返回self字符串表示的title字段。而在类Meta中,设置了List表格按照title字母顺序的排 序方式。在类Admin的设置中,允许Django针对当前的Models模型自动生成Django超级用户的后台管理入口,关键词pass设定 Django将按照默认方式生成后台管理界面。这一部分在稍后的章节可以看到,由此也可以体会到Django带来的独特魅力。下面再来添加新闻条目 Item对应的Models模型,代码如下面所示:
import datetime |
Item 数据表对应的Models代码稍微复杂一些,但并不晦涩。代码里首先引入datetime类型,用于定义表示文章创建日期的created_date字 段,并且通过Python的标准函数datetime.datetime.now返回系统当前日期来设置字段的默认值。在记录排序的ordering设置 中,符号“-”表示按照日期的倒序进行排列,如果文章创建日期相同,则再按照title的字母序正序排列。
到此为止,应用中模型部分需要定义的两个数据表都已经创建完毕,下一步的工作是让Django部署并在数据库中生成已经写好的Models模型。
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'news.article',
)
添加admin模块后还不能立即使用Django的admin后台管理界面,需要打开News工程根目录下的urls.py文件,将“# Uncomment this for admin:”后面的#注释去掉,使得Django针对管理界面的URL转向“(r'^admin/', include('django.contrib.admin.urls')),”可用,这样访问admin模块时Django就可以顺利解析访问地址并 转向后台管理界面。
当配置文件的改动完成之后,就可以在News工程的命令提示符下执行manage.py syncdb指令。Django会根据模型的定义自动完成ORM的数据库映射工作,屏蔽了底层数据库细节和SQL查询的编写。:::
chinaunix网友2009-05-11 08:05:23
(r'^time/$',hello.views.index), 添加引号之后就变成了: (r'^time/$','hello.views.index'), 如果是报了找不到Name 之类的错误的话可能是自己输入的URL有问题的!
chinaunix网友2009-04-29 13:11:07
urls.py 文件urls.py负责配置URL的地址映射以及管理URL的地址格式。 哎,我在配置的时候这样写的 (r'^time/$',hello.views.index), 总是提示我找不到指定的模块呀!!!郁闷死我了。居然要加引号!!! 以后做事情一定要仔细!而且对于学习而言务必要努力将手册文档看明白先! 要不然会死得很惨