一、模型概述

- 通用评论:通过 GenericForeignKey 可关联到任意模型
- 树形结构:支持无限级嵌套回复(通过 django-mptt 实现)
- 公共控制:可控制评论是否公开显示
- 用户关联:与用户系统集成,记录评论者信息
- 时间戳:自动记录评论创建时间
- 完整前端:包含模板、样式和交互脚本
二、字段说明
字段名 | 类型/关系 | 描述 | 参数配置 |
|---|---|---|---|
user | ForeignKey | 发表评论的用户 | to=settings.AUTHUSERMODEL, ondelete=models.CASCADE, verbosename="用户" |
content | TextField | 评论内容 | maxlength=3000, verbosename="评论内容" |
createtime | DateTimeField | 创建时间 | autonowadd=True, verbosename="创建时间" |
contenttype | ForeignKey | 关联的内容类型 | to=ContentType, ondelete=models.CASCADE |
objectid | PositiveIntegerField | 关联对象ID | 无 |
contentobject | GenericForeignKey | 通用外键关联对象 | ('contenttype', 'objectid') |
parent | TreeForeignKey | 父级评论(树形结构) | to='self', ondelete=models.CASCADE, null=True, blank=True, relatedname='children', verbosename="父评论" |
ispublic | BooleanField | 是否公开显示 | default=False, verbosename="公开显示" |
三、核心功能实现
1. 通用外键机制
# 可关联到任意模型
from django.contrib.contenttypes.fields import GenericRelation
class Article(models.Model):
title = models.CharField(maxlength=200)
comments = GenericRelation(Comment) # 添加反向关系2. 树形结构管理
- 使用 django-mptt 实现高效树形查询
- 支持无限级嵌套回复
- 内置字段:
treeid,lft,rght,level(MPTT自动管理)
3. 查询方法
4. 前端渲染
- 模板标签:
rendercomments,getcommentscount - 递归渲染:使用
{% recursetree %}标签 - 动态表单:JavaScript 控制回复表单显示/隐藏
- 响应式设计:Bootstrap 样式支持
四、模板标签功能
1. rendercomments标签
- 评论表单
- 登录提示
- 嵌套评论列表
- 回复交互功能
2. getcommentscount标签
3. getcontenttypeid过滤器
五、前端交互功能
1. 评论发布
- 主评论表单位于评论列表顶部
- 支持富文本(可扩展)
- 需要用户登录
2. 回复机制
# 回复按钮触发
点击"回复" → 显示表单 → 自动填充 parent → 提交3. 视觉效果
- 嵌套评论有视觉缩进
- 表单有平滑动画
- 响应式布局
六、配置示例
1. 模型集成
2. 视图处理
七、性能优化
- MPTT索引:
treeid,lft字段已优化查询 - 数据库索引:
- 缓存支持:可集成
cachetreechildren(示例中已注释)
八、未来功能
- 审核机制:添加
isapproved字段 - 点赞功能:添加
likescount字段 - 附件支持:添加
attachment字段 - @提及:解析内容中的 @username
- 通知系统:评论回复时通知相关用户
- 敏感词过滤:提交前内容过滤
九、前端控制
{% if commentsenabled %}来控制评论区域的渲染