Excel不相邻列如何打印在一起-英雄云拓展知识分享
117
2023-11-07
【摘要】 本书摘自《Python+3自动化软件发布系统》一书中第2章,第8节,由陈刚、王洪军编著。
2.8.2 Model 示例
理论说得再多,也是苍白的,对于技术来说,实践才能出真知,实战才能让技术人 员有所收获。在本小节,以一个小型的论坛为原型,来讲述一下 Django Models 的内 容(参照 https://github.com/sibtc/django-beginners-guide 的数据库结构)。整个 项目的构思是维护几个论坛版块(Board), 每个版块就像一个分类一样。在指定的版 块中,用户可以通过创建新主题(Topic) 开始讨论,其他用户参与讨论或回复(Post)”
● Board:版块;
● Topic:主题;● Post:帖子(主题的回复或评论)。
对于 Board 模型,将从两个字段开始:name 和 description 。name 字段必须是唯 一的,应避免有重复的名称。description 用于说明这个版块是做什么用的。
Topic 模型包括四个字段:subject 表示主题内容;last_update 用来定义话题的 排序;starter 用来识别谁发起的话题;board 用于指定它属于哪个版块。
Post 模型有一个 message 字段,用于存储回复的内容;created_at 在排序时用 (最先发表的帖子排在最前面);updated_at 告诉用户是否更新了内容,同时,还需要 有对应的 User 模型的引用;以及Post 是由谁创建的和由谁更新的。
最后是 User 模型,包括 username 、password 、email 、is_superuser 标志,因为这 几乎是我们现在要使用的所有东西。
需要注意的是,我们不需要创建 User 模型,因为 Django 已经在 contrib 包中内
置了 User 模型,可以直接拿来用。
在 bbs 目录下的 models.py 文件里,输入以下内容,实现这四个 Model 的创建。
https://github.com/aguncn/django_demo_project/blob/master/bbs/models.py
代码解释:
第5~10行:定义了一个继承自 models.Model 的 Board 类,它对应于数据库当 中的一个表。
第6行:定义了一个名称为 name 的字段,字段类型为CharField, 这个类为 djan- go.db.models.Field 类的子类。关于 Field 类的介绍,接下来的章节就会涉及。在 name 中,限制了最大字符串长度为30(max_length), 且 name 字段内容在整个数据 表中必须具有唯一性(unique) 。 关于 Fields 中的属性介绍,也会随着 Fields 类一并 介绍。
第9~10行:在 Board 类里,定义了一个__str__ 方法,它用于定义默认的显示 字段。
第14行:定义了一个日期型字段——DateTimeField 。 其中的 auto_now_add= True 属性,表示此字段不用提供日期数值,框架会自动将当前的日期加入数据库。
第15~16行:在 Topic 数据表中定义了一个指向 Board 的外键,related_name 属性用于指定反向查询的名称,即通过它,可以查询出属于每个 Board 的 Topic 。on_ delete 的属性定义了级联删除,即当删除一个 Board 时,其所属的所有 Topic 也会一 并删除。
第32~33行:在 Post 模型中,该 updated_by 字段设置 related_name ='+'。 这 提示 Django 不需要这种反向关系,所以它会被忽略。
其他的代码,读者结合上一段的叙述和前段的解释,相信可以轻易地理解。
最后,读者可能会有疑问:“每个数据表常用的主键/ ID 呢?”如果我们没有为模 型指定主键,Django 会自动为我们生成,所以这里没有必要显示定义。
在定义好 models.py 文件之后,先在项目根目录运行如下命令,它会记录我们对 models.py 的所有改动,并且将这个改动迁移到 migrations 这个文件下生成一个 文件。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~