我有一个用于撰写和编辑博客文章的表单,如下所示:
class EditorForm(FlaskForm):
title = StringField('Title', validators=[DataRequired(), Length(min=1, max=250)])
body = PageDownField('Body', validators=[DataRequired()])
tags = SelectMultipleField('Tags', coerce=int)
timestamp = DateTimeField('Timestamp')
published = BooleanField('Publish?')
update = BooleanField('Update Timestamp?')
delete = SubmitField('Delete')
submit = SubmitField('Save')
在我看来,我区分编辑现有帖子和创建新帖子。对于现有的帖子,如果它们有关联的标签,我希望它们在表单中突出显示,SelectMultipleField以便用户可以看到它们。
如果这些被突出显示并且我想删除标签,我需要能够取消突出显示它们并提交表单来这样做。
以下是我目前观点的相关部分:
@app.route('/editor/<slug>', methods=['GET', 'POST'])
@app.route('/editor/', methods=['GET', 'POST'])
@login_required
def editor(slug=None):
# old post or new post?
if slug:
post = Post.query.filter_by(slug=slug).first()
else:
post = Post()
# populate form, blank for new post
form = EditorForm(obj=post)
# populate tags field
form.tags.choices = [(tag.id, tag.tag) for tag in Tag.query.order_by('tag')]
# declare list for tag highlights on GET
if request.method == 'GET':
form.tags.default = []
# if post has linked tags, highlight them
if post.tags:
for tag in post.tags:
if tag.id not in form.tags.default:
form.tags.default.append(tag.id)
form.process()
在解决与我的问题相关的其他问题时,我发现我不能直接使用form.tags.data来突出显示关联的标签,因为这意味着该字段将忽略用户在表单上的操作,即使正确的选择将被突出显示。这就是我使用form.tags.default.
form.tags.default似乎可以突出显示正确的标签,但form.process()会擦除由填写的所有其他字段form = EditorForm(obj=post)。
所以我的问题是:如何使用现有的帖子数据填充我的表单并在同一实例中突出显示正确的标签?
蝴蝶刀刀
相关分类