使用wtforms的Flask网格编辑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用wtforms的Flask网格编辑相关的知识,希望对你有一定的参考价值。

我正在做一个项目,该项目提取俄勒冈州白酒价格表中列出的所有烈酒的清单,并将其存储在我的烧瓶应用程序中的表格中。目的是使主持人可以看到列表,并在每个烈酒旁边选中一个框,以指定是否是威士忌。

这是我第一次真正使用flask,但是我已经两次阅读了一本有关flask的书,试图去理解它,所以这是我尝试构建自己的东西。

现在,如果我选中一个框,然后单击提交,则所有记录都将切换为is_whiskey = False,而不是每个记录都是单独完成的。

这是我的模特:

class Whiskies(db.Model):
    __tablename__ = 'whiskies'
    id = db.Column(db.Integer, primary_key=True)
    ols_name = db.Column(db.String(64), unique=True)
    display_name = db.Column(db.String(64), unique=True, index=True)
    display_distiller = db.Column(db.String(64), unique=False)
    is_whiskey = db.Column(db.Boolean, default=True)
    reviews = db.relationship('Review', backref='review', lazy='dynamic')

这是我的观点:

@main.route('/update-whiskies', methods=['GET', 'POST'])
@login_required
@permission_required(Permission.MODERATE)
def update_whiskies():
    whiskies = Whiskies.query.all()
    is_whiskey_form = IsWhiskeyForm()
    submitpageform = SubmitPageForm()
    if submitpageform.validate_on_submit():
        for w in whiskies:
            w.is_whiskey = is_whiskey_form.is_whiskey.data
            db.session.update(w)
        db.session.commit()
        flash("You updated a bunch of whiskies")
        return redirect(url_for('.index'))
    return render_template('update_whiskies.html', whiskies=whiskies,
                           is_whiskey_form=is_whiskey_form,
                           submitpageform=submitpageform)

这是我的.html页面:

% extends "base.html" %
% import "bootstrap/wtf.html" as wtf %

% block page_content %
<div>
    % for whiskey in whiskies %
    <li class="whiskey">
        % if whiskey.display_name %
             whiskey.display_name 
        % else %
             whiskey.ols_name 
        % endif %
         is_whiskey_form.is_whiskey.label 
         is_whiskey_form.is_whiskey(value=whiskey.is_whiskey) 
    </li>
    % endfor %
     wtf.quick_form(submitpageform) 
</div>
% endblock %

这是我的表格:

class IsWhiskeyForm(Form):
    "This is intended for use in bulk editing whiskies"
    is_whiskey = BooleanField("Is Whiskey", default="checked")


class SubmitPageForm(FlaskForm):
    "This is intended for submitting a batch edit"
    submit = SubmitField('Update Whiskies')

这是页面当前的外观。我希望能够选中一个框并单击“提交”,然后将其反映在数据库中。

This is what the page currently looks like

非常感谢愿意帮助我的人。我被困了大约一个星期,我只需要克服这个驼峰就可以完成我的模块了。

答案

尝试一下

if submitpageform.validate_on_submit():
    for w in whiskies:
        w.is_whiskey = is_whiskey_form.is_whiskey.data
    db.session.commit()

删除db.session.update(w)

以上是关于使用wtforms的Flask网格编辑的主要内容,如果未能解决你的问题,请参考以下文章

Flask学习第7篇:Flask中的wtforms使用

flask框架----flask中的wtforms使用

Flask 第七篇Flask中的wtforms使用

flask中的wtforms使用

flask wtforms组件详解

flask框架中使用wtforms