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 #ssj # 定义评论模型,用于存储用户对文章的评论数据 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) #ssj class Meta: """ 模型元数据类:定义模型的元信息,如排序、名称等 """ # 默认排序:按 id 降序排列(最新的评论在前) ordering = ['-id'] # 模型的可读名称(单数形式),用于管理后台等界面显示 verbose_name = _('comment') # 模型的可读名称(复数形式),此处与单数相同 verbose_name_plural = verbose_name # 指定获取最新一条记录时依据的字段 get_latest_by = 'id' #ssj def __str__(self): """ 返回该评论对象的字符串表示 通常在管理后台或调试时显示 此处返回评论的正文内容(body) """ return self.body