【问题标题】:Flask - Render a select field with flask-wtforms and QuerySelectFlask - 使用 flask-wtforms 和 QuerySelect 渲染一个选择字段
【发布时间】:2016-09-03 06:00:44
【问题描述】:

我正在尝试呈现一个包含 3 个文本字段和一个选择字段的表单。我可以使用来自数据库的数据而不是选择字段来呈现文本字段。 选择字段必须将来自数据库的数据和其他选项显示为选定选项。 我正在使用: Flask-SQLAlchemy==2.1 Flask-WTF==0.12

这是代码:

查看

@app.route('/gateway/edit/<int:gwt_id>', methods=['GET','POST'])
def gateway_edit(gwt_id):
    q = Device.query.filter_by(gtw_id=gwt_id).first()
    form = Gateway(obj=q)
    form.populate_obj(q)
    return render_template('gateway.html', form=form)

型号

class Gateway(db.Model):
    __tablename__ = "gateway"
    gateway_id = db.Column(db.Integer, primary_key=True)
    gateway_name = db.Column(db.String(64))
    gateway_desc = db.Column(db.String(64))
    devices = db.relationship('Device', backref='gateway', lazy='dynamic')



class Device(db.Model):
    __tablename__ = "device"
    device_id = db.Column(db.Integer, primary_key=True)
    device_name = db.Column(db.String(64))
    device_desc = db.Column(db.String(64))
    gateway_id = db.Column(db.Integer,db.ForeignKey('gateway.gateway_id'))
    device_ip = db.Column(db.String(64))

表格

class Gateway(Form):
    gateway_name = StringField('Gateway Name')
    gateway_desc = TextAreaField('Gateway Description')

def gtws():
    return Gateway.query

class Device(Form):
    device_name = StringField('Device Name')
    device_desc = TextAreaField('Device Description')
    device_ip = StringField('Device IP')
    gtw_group = QuerySelectField('Gateway',query_factory=gtws)

模板

{{ render_field(form.device_name, class="form-control")}}
{{ render_field(form.device_desc, class="form-control")}}
{{ render_field(form.device_ip, class="form-control")}}
{{ render_field(form.gtw_group, class="form-control")}}

提前致谢,

【问题讨论】:

    标签: flask flask-sqlalchemy flask-wtforms


    【解决方案1】:

    我发现了问题。我误解了模型中的反向引用。它在我的设备模型中创建了一个虚拟列。然后我可以使用这个虚拟列名关联表单域(在我的例子中是 QuerySelectField)。

    我对代码做了一些简单的改动: 型号

    devices = db.relationship('Device', backref='gtw', lazy='dynamic')
    

    表格

    gtw = QuerySelectField('Gateway',query_factory=gtws)
    

    模板

    {{ render_field(form.gtw, class="form-control")}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 2012-08-23
      • 1970-01-01
      相关资源
      最近更新 更多