文章模型
字段名 | 说明 |
title | 标题 |
desc | 简述 |
text | 正文 |
status | 文章状态。'd':草稿,'p':'发布' |
views | 浏览量 |
created_time | 创建时间 |
last_mod_time | 最后修改时间 |
pub_time | 发布时间 |
author | 作者 |
category | 分类 |
tags | 标签集合 |
分类模型
字段名 | 说明 |
name | 分类名 |
created_time | 创建时间 |
last_mod_time | 修改时间 |
标签模型
字段名 | 说明 |
name | 标签名 |
created_time | 创建时间 |
last_mod_time | 修改时间 |
模型间的关系
模型名称 | 关联关系 |
文章 =》分类 | 多对一 |
文章 =》 标签 | 多对多 |
文章 =》 用户 | 多对一 |
1. 为什么要“创建时间”和“最后修改时间”
在设计表时,每条数据都应该有自己的创建时间及修改时间,有些框架例如 Laravel,则会自动管理这两个时间,自动创建这两个字段: created_at & updated_at。
created_time:插入数据时,自动以当前时间作为值入库,last_mod_time:修改数据时,自动以当前时间作为值更新数据库。
在 Django 的 models 中,可以将这两个字段设置成 DateTimeField,在 Django admin 中就会渲染成日期组件。为了能让它们达到上述的效果,可以使用 auto_now_add 以及 auto_now 这两个属性,让它们自动赋值,只在插入数据和修改数据才自动填充。为 DateTimeField 增加这两个属性后,它们将不允许修改,Django admin 中的新增和修改视图均不会渲染它们。而发布时间,则需要我们手动赋值。
2. 文章状态(草稿、发布)
一篇文章,很难一次写完,未写完的文章以及已写完不想发布出来让他人看到的都可以视作“草稿”。也可以衍生出其他状态类型,如:删除等等... ...
3. 关联关系
在文章模型中,用户、分类均以外键关系与之关联,形成文章=》(用户、分类)多对一的关系。分类这块,如果想深究,还能延伸出二级分类,无限级分类等更复杂的功能。文章与标签模型为多对多关系,使用 ManyToManyField,Django 则会为我们自动创建一个 post_tag 关联关系表。
4. 文章编辑器
如果你想使用 Markdown 进行文章的编写,推荐使用 bootstrap-markdown,不过你可能需要自己重构一下图片上传。
如果选择富文本编辑器,推荐使用 django-ckeditor。
POST Model
Category Model
Tag Model