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

72 lines
2.4 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):
# 评论正文,限制最大输入长度 300使用 TextField 以便输入多行内容
body = models.TextField('正文', max_length=300)
# 评论创建时间,默认使用 timezone.now可自动获取当前时区时间
creation_time = models.DateTimeField(
_('creation time'),
default=now
)
# 评论最后修改时间,通常用于编辑评论功能,但如果不编辑也会保持不变
last_modify_time = models.DateTimeField(
_('last modify time'),
default=now
)
# 评论作者,关联到用户模型,用户删除时,对应评论也一并删除
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
verbose_name=_('author'),
on_delete=models.CASCADE
)
# 评论所属文章,关联到 Article 模型,文章被删除时,其下所有评论也被删除
article = models.ForeignKey(
Article,
verbose_name=_('article'),
on_delete=models.CASCADE
)
# 父评论,用于构建"评论回复"树结构
# 若为空 → 表示为一级评论;不为空 → 表示为某条评论的子评论
parent_comment = models.ForeignKey(
'self', # 自关联
verbose_name=_('parent comment'),
blank=True, # 表单中允许为空
null=True, # 数据库允许为 null
on_delete=models.CASCADE # 父评论删除时,子评论也被删除
)
# 是否启用评论(常用于需要审核评论是否展示)
# 默认为 False → 新评论不会立刻显示,需要管理员审核启用
is_enable = models.BooleanField(
_('enable'),
default=False,
blank=False,
null=False
)
class Meta:
# 默认按 id 倒序排列 → 新评论显示在前
ordering = ['-id']
# Django Admin 后台显示的模型名称
verbose_name = _('comment')
verbose_name_plural = verbose_name
# latest() 方法依据 id 获取最新对象
get_latest_by = 'id'
def __str__(self):
# 后台及 shell 打印对象时显示评论内容
return self.body