Update models.py

master
pk6lqz7py 1 week ago
parent 97c1e703a8
commit 01c946fb35

@ -1,3 +1,4 @@
#zyl:
from django.conf import settings
from django.db import models
from django.utils.timezone import now
@ -5,35 +6,88 @@ from django.utils.translation import gettext_lazy as _
from blog.models import Article
# Create your models here.
class Comment(models.Model):
"""
评论模型用于存储用户对博客文章的评论
支持嵌套评论回复功能和软删除is_enable 控制显示
"""
# 评论正文内容最大长度300字符
# verbose_name='正文' 在 Django Admin 中显示为"正文"
body = models.TextField('正文', max_length=300)
# 评论创建时间,默认值为当前时间
# 使用 _('creation time') 支持国际化翻译
creation_time = models.DateTimeField(_('creation time'), default=now)
# 评论最后修改时间,默认值为当前时间
# 每次调用 save() 方法时需要手动更新此字段
last_modify_time = models.DateTimeField(_('last modify time'), default=now)
# 外键关联:评论作者
# settings.AUTH_USER_MODEL 使用项目配置的用户模型(默认为 auth.User
# on_delete=models.CASCADE当用户被删除时级联删除其所有评论
# verbose_name=_('author'):在后台显示为"author"(可翻译)
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
verbose_name=_('author'),
on_delete=models.CASCADE)
# 外键关联:评论所属的文章
# on_delete=models.CASCADE当文章被删除时级联删除该文章的所有评论
article = models.ForeignKey(
Article,
verbose_name=_('article'),
on_delete=models.CASCADE)
# 自关联外键:上级评论(用于实现评论嵌套/回复功能)
# 'self' 表示关联到 Comment 模型自身
# blank=True, null=True允许为空顶级评论没有父评论
# on_delete=models.CASCADE当父评论被删除时级联删除所有子评论
# 理论上可以支持无限层级的评论嵌套
parent_comment = models.ForeignKey(
'self',
verbose_name=_('parent comment'),
blank=True,
null=True,
on_delete=models.CASCADE)
# 是否启用/显示该评论的布尔字段
# default=False新评论默认不显示需要审核后才能显示
# blank=False, null=False不允许为空在表单和数据库中都必填
# 实现"软删除"功能,避免物理删除评论数据
is_enable = models.BooleanField(_('enable'),
default=False, blank=False, null=False)
class Meta:
"""
模型元数据配置定义模型在 Django Admin 中的行为和显示
"""
# 默认排序规则:按 ID 降序排列,最新评论在前
ordering = ['-id']
# 模型单数名称:在 Django Admin 中显示为"comment"(可翻译)
verbose_name = _('comment')
# 模型复数名称:复数形式与单数相同
verbose_name_plural = verbose_name
# 指定获取"最新"记录时使用的字段
# 可通过 Comment.objects.latest() 获取最新评论
get_latest_by = 'id'
def __str__(self):
"""
返回评论对象的字符串表示
Django Admin 和调试时显示评论正文最多300字符
"""
return self.body
# 使用建议:
# 1. 在视图中创建评论后,应调用 save() 方法保存
# 2. 修改评论内容时,需要手动更新 last_modify_time 字段:
# comment.last_modify_time = now()
# 3. 前端展示评论时,应过滤 is_enable=True 的评论
Loading…
Cancel
Save