你能有一个WTForm的多个实例吗?

2024-06-11 01:54:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在一个内部应用程序上实现一个注释系统(使用Python/Flask/WTForms),它允许注释,并且每个注释下都有一个级别的子命令。在

这些注释可以很好地用于一个简单的WTForm类,例如:

班级评语表(表): comment=TextAreaField('comment',验证器=[DataRequired()])

然后调用到Jinja2模板中。在

问题是如何实施“sub”评论。它是子命令和父注释之间的基本多对一外键关系。问题是在一个给定的屏幕上可以有多个评论,但是只有一个评论表单。但是,每个注释都有关联的子命令,因此子命令表单需要在屏幕上(在每个注释下)呈现多次,我预计呈现和表单提交(在这里使用WTForms)时都会发生冲突。在

该模型非常类似于Stackoverflow,其中有一个问题>;与问题相关联的许多注释;以及与每个注释关联的多个子命令。在

简单地不为子命令使用WTForms,并公开一个简单的restapi并使用一个小AJAX将子命令提交给REST端点,会不会更简单?在


Tags: 命令应用程序jinja2flask表单屏幕系统comment
1条回答
网友
1楼 · 发布于 2024-06-11 01:54:48

是的,只在需要时创建表单比向客户发送N+1个表单(N是注释的数量)要简单得多—但是,如果您希望采用渐进式增强方法,那么这就是您需要做的。在

在这种情况下,您只需将数据转换为表单,并在服务器端处理响应:

class CommentForm(Form):
    parent_id = IntegerField(widget=HiddenWidget)
    comment = TextAreaField("Comment", validators=[InputRequired()])

# Then, in your view handler
comments = get_comment_list()
comments = [CommentForm(comment.id, comment.text) for comment in comments]
return render_template(article=article, comments=comments)

# And in your "comment" endpoint you simply handle the comment
comment = CommentForm(request.post)

# This shouldn't be necessary, but it's just an example of figuring out
# what's going on from the data provided
if comment.parent_id.data:
    # Insert into comment chain
else:
    # It is a rootless comment

相关问题 更多 >