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.
tentest/doc/DjangoBlog/comments/models.py

61 lines
3.1 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.

# FRR该模块定义了评论(Comment)数据模型,用于存储用户对文章的评论信息,
# 包括评论内容、作者、关联文章、创建时间等字段,同时支持评论回复功能(父子评论关联)。
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 # 导入文章模型,建立评论与文章的关联
# FRR评论模型类继承自Django的Model基类映射数据库中的评论表
class Comment(models.Model):
# FRR评论正文字段TextField支持长文本max_length限制最大长度为300字符
body = models.TextField('正文', max_length=300)
# FRR评论创建时间字段默认值为当前时间verbose_name用于后台显示的字段名国际化
creation_time = models.DateTimeField(_('creation time'), default=now)
# FRR评论最后修改时间字段默认值为当前时间用于记录评论更新时间
last_modify_time = models.DateTimeField(_('last modify time'), default=now)
# FRR评论作者外键关联Django内置的用户模型settings.AUTH_USER_MODEL
# on_delete=models.CASCADE表示若用户被删除其评论也会被级联删除
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
verbose_name=_('author'),
on_delete=models.CASCADE)
# FRR关联的文章外键评论属于某篇文章
# on_delete=models.CASCADE表示若文章被删除其下所有评论也会被级联删除
article = models.ForeignKey(
Article,
verbose_name=_('article'),
on_delete=models.CASCADE)
# FRR父评论外键实现评论回复功能自关联
# 'self'表示关联自身模型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)
# FRR评论是否启用的状态字段默认值为False可能需要管理员审核后启用
# blank=False和null=False表示该字段为必填项不允许为空
is_enable = models.BooleanField(_('enable'),
default=False, blank=False, null=False)
# FRRMeta内部类用于配置模型的元数据
class Meta:
ordering = ['-id'] # 数据查询时按id降序排列最新评论在前
verbose_name = _('comment') # 模型的单数显示名称(国际化)
verbose_name_plural = verbose_name # 模型的复数显示名称(与单数相同)
get_latest_by = 'id' # 指定通过id字段获取最新记录
# FRR定义模型实例的字符串表示返回评论正文便于在后台和调试时识别对象
def __str__(self):
return self.body