|
|
from django.conf import settings
|
|
|
from django.db import models
|
|
|
from django.utils.timezone import now
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
|
|
from blog.models import Article
|
|
|
|
|
|
|
|
|
# 定义评论模型,用于存储用户对文章的评论数据
|
|
|
class Comment(models.Model):
|
|
|
# 评论正文内容
|
|
|
# 使用 TextField 存储较长文本,限制最大长度为 300 字符
|
|
|
# verbose_name 设置为 '正文',在管理后台等界面中显示为字段标签
|
|
|
body = models.TextField('正文', max_length=300)
|
|
|
|
|
|
# 评论创建时间
|
|
|
# 自动记录评论的创建时间,默认值为当前时间(now)
|
|
|
# verbose_name 为国际化字符串 'creation time'
|
|
|
creation_time = models.DateTimeField(_('creation time'), default=now)
|
|
|
|
|
|
# 评论最后修改时间
|
|
|
# 记录评论最后一次被修改的时间,默认值为当前时间(通常在保存时更新)
|
|
|
# verbose_name 为国际化字符串 'last modify time'
|
|
|
last_modify_time = models.DateTimeField(_('last modify time'), default=now)
|
|
|
|
|
|
# 评论作者
|
|
|
# 外键关联到用户模型(支持自定义用户模型)
|
|
|
# verbose_name 为 'author'(国际化),on_delete=models.CASCADE 表示用户删除时,其评论也级联删除
|
|
|
author = models.ForeignKey(
|
|
|
settings.AUTH_USER_MODEL,
|
|
|
verbose_name=_('author'),
|
|
|
on_delete=models.CASCADE)
|
|
|
|
|
|
# 所属文章
|
|
|
# 外键关联到 Article 模型,表示该评论属于哪篇文章
|
|
|
# verbose_name 为 'article'(国际化),级联删除:文章删除时,其所有评论也被删除
|
|
|
article = models.ForeignKey(
|
|
|
Article,
|
|
|
verbose_name=_('article'),
|
|
|
on_delete=models.CASCADE)
|
|
|
|
|
|
# 父级评论(用于实现嵌套评论/回复功能)
|
|
|
# 外键指向自身('self'),实现树形结构
|
|
|
# blank=True, null=True 表示可以为空(即一级评论没有父评论)
|
|
|
# verbose_name 为 'parent comment'(国际化),级联删除:父评论删除时,其子评论也删除
|
|
|
parent_comment = models.ForeignKey(
|
|
|
'self',
|
|
|
verbose_name=_('parent comment'),
|
|
|
blank=True,
|
|
|
null=True,
|
|
|
on_delete=models.CASCADE)
|
|
|
|
|
|
# 是否启用(是否显示)
|
|
|
# BooleanField 用于控制评论是否公开显示
|
|
|
# default=False 表示默认不启用(需审核或手动开启)
|
|
|
# blank=False, null=False 表示该字段不可为空,必须有值
|
|
|
# verbose_name 为 'enable'(国际化)
|
|
|
is_enable = models.BooleanField(_('enable'),
|
|
|
default=False, blank=False, null=False)
|
|
|
|
|
|
class Meta:
|
|
|
"""
|
|
|
模型元数据类:定义模型的元信息,如排序、名称等
|
|
|
"""
|
|
|
# 默认排序:按 id 降序排列(最新的评论在前)
|
|
|
ordering = ['-id']
|
|
|
|
|
|
# 模型的可读名称(单数形式),用于管理后台等界面显示
|
|
|
verbose_name = _('comment')
|
|
|
|
|
|
# 模型的可读名称(复数形式),此处与单数相同
|
|
|
verbose_name_plural = verbose_name
|
|
|
|
|
|
# 指定获取最新一条记录时依据的字段
|
|
|
get_latest_by = 'id'
|
|
|
|
|
|
def __str__(self):
|
|
|
"""
|
|
|
返回该评论对象的字符串表示
|
|
|
通常在管理后台或调试时显示
|
|
|
此处返回评论的正文内容(body)
|
|
|
"""
|
|
|
return self.body
|