Skip to content

Django 文章数据模型设计及演进 #3

@codetalks-new

Description

@codetalks-new

目前的基本设计如下:

class Post(BaseModel,SoftDeleteMixin):
  # 显示指定主键 设计成 uuid 是为了避免被直接遍历爬取
  id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
  node = models.ForeignKey(Node, verbose_name="节点", on_delete=models.PROTECT)
  creator = models.ForeignKey(WepostUser, verbose_name="创建者", on_delete=models.PROTECT)
  title = models.CharField("标题", max_length=128)
  content = models.TextField("内容",max_length=40960)
  content_rendered = models.TextField("渲染内容",max_length=81920, default='')
  # 运营相关
  order = models.IntegerField("排序",default=0)
  # 回复相关冗余
  last_reply_by = models.CharField("最后回复人",max_length=150, blank=True, default='')
  last_touched = models.DateTimeField(auto_now=True, verbose_name='最后活跃')
  reply_count = models.PositiveIntegerField("回复数", default=0)
  # 统计相关数据
  like_count = models.PositiveIntegerField("喜欢数", default=0)
  dislike_count = models.PositiveIntegerField("不喜欢数", default=0)
  fav_count = models.PositiveIntegerField("收藏数", default=0)
  share_count = models.PositiveIntegerField("分享数", default=0)
  member_view_count = models.PositiveIntegerField("会员浏览数", default=0)
  other_view_count = models.PositiveIntegerField("网页浏览数", default=0)

值得说明的是

  1. BaseModel 继承了 created,updated 字段。
  2. SoftDeleteMixin 继承了 _deleted_at 字段,此字段用于记录对应文章是否被软删除了。
  3. 文章内容目录主要支持 markdown格式, content 主要用来保存原始的编辑内容,而 content_rendered 缓存 渲染成的 html 格式文档。

Metadata

Metadata

Assignees

No one assigned

    Labels

    主题模块主题相关设计演进文档

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions