You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
djangoBlogStudy/src/comments/models.py

84 lines
3.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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