Update forms.py

master
pk6lqz7py 2 weeks ago
parent 821a90e8f2
commit 97c1e703a8

@ -1,4 +1,7 @@
#zyl
# comments/forms.py
# Django 表单定义文件:用于处理评论的创建和验证
from django import forms
from django.forms import ModelForm
from django.core.exceptions import ValidationError
@ -7,23 +10,71 @@ from .models import Comment
class CommentForm(ModelForm):
"""
评论表单类
用于处理用户提交的评论内容包括主评论和回复评论
功能特性
- 验证评论内容的长度和格式
- 处理嵌套评论回复功能
- Comment 模型直接绑定
"""
# 隐藏输入字段:用于存储父评论的 ID当用户回复某个评论时
# required=False 表示这是可选字段(主评论没有父评论)
# 在模板中需要手动渲染此字段,或通过 JavaScript 动态赋值
parent_comment_id = forms.IntegerField(
widget=forms.HiddenInput, required=False)
widget=forms.HiddenInput, # 使用隐藏输入框,不显示给用户
required=False # 允许为空(顶级评论无需父评论)
)
class Meta:
model = Comment
fields = ['body']
"""
表单元数据配置
"""
model = Comment # 指定关联的模型为 Comment
fields = ['body'] # 只包含 body 字段(评论内容)
# 其他字段(如 author、article将在视图中自动赋值
def clean_body(self):
"""验证评论内容"""
"""
自定义验证方法验证评论内容body 字段
Django 表单会自动调用以 clean_<fieldname> 命名的方法来验证特定字段
验证规则
1. 去除首尾空白字符
2. 最小长度限制5个字符
3. 最大长度限制300个字符与模型定义保持一致
返回:
str: 验证通过并清理后的评论内容
抛出:
ValidationError: 当验证失败时抛出异常错误信息将显示在表单中
"""
# 从已清理的数据中获取 body 内容,并去除首尾空白
body = self.cleaned_data.get('body').strip()
# 定义长度限制常量
min_length = 5
max_length = 300 # 与模型中保持一致
max_length = 300 # 必须 Comment 模型中 body 字段的 max_length 保持一致
# 字数限制验证
# 验证:检查最小长度
if len(body) < min_length:
raise ValidationError(f"评论内容不能少于{min_length}个字符")
# 验证:检查最大长度
if len(body) > max_length:
raise ValidationError(f"评论内容不能超过{max_length}个字符")
return body
# 返回清理后的数据Django 要求 clean_<field> 方法必须返回处理后的值)
return body
# 使用示例(在视图中):
# form = CommentForm(request.POST)
# if form.is_valid():
# comment = form.save(commit=False)
# comment.author = request.user # 自动填充作者
# comment.article = article # 自动填充文章
# comment.save()
Loading…
Cancel
Save