繁体   English   中英

PYTHON WTForms flask - 将数据从下拉列表保存到数据库

[英]PYTHON WTForms flask - saving data from drop down list to database

python和flask的新手。

尝试使用 WTForms 将下拉列表中的数据保存到数据库。

目的是从表Choice(db.model) 中获取数据。

将其上传到每个字段以供选择 -> Choice(FlaskForm)

并将选择的数据存储在Order(db.model) 中

我确实设法了解如何获得三个下拉列表。 但我错过了如何将所选数据保存到订单表的重点

   form = ChoiceForm(csrf_enabled=True)
    if form.validate_on_submit():
        ''' get instance of version from form data'''
        item = Order(
                    form.x1.data,
                    form.opts.data,
                    form.xx.data,
                    )

        db.session.add(item)
        db.session.commit()

上面这段代码是我需要弄清楚的部分(如何将数据提交到数据库顺序)

下面是代码

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms_sqlalchemy.fields import QuerySelectField

app = Flask(__name__)

app.secret_key = "Secret Key"
 
#SqlAlchemy Database Configuration With Mysql
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///leodat1.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class Choice(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    extra = db.Column(db.String(50))

    def __repr__(self):
        return 'Choice {}'.format(self.name)

    def __init__(self, name, extra):
        self.name = name 
        self.extra = extra

def choice_query():
    return Choice.query
def choice_query_x():
    return Choice.query
def choice_query_x1():
    return Choice.query




class ChoiceForm(FlaskForm):
    opts = QuerySelectField(query_factory=choice_query, allow_blank=False, get_label='extra')
    xx = QuerySelectField(query_factory=choice_query_x, allow_blank=False, get_label='extra')
    x1 = QuerySelectField(query_factory=choice_query_x1, allow_blank=False, get_label='extra')


class Order(db.Model):
    order_id = db.Column(db.Integer, primary_key=True)
    item_01 = db.Column(db.String(50))
    item_02 = db.Column(db.String(50))
    choice_id = db.Column(db.Integer, db.ForeignKey('choice.id'))
    Choice = db.relationship('Choice', foreign_keys=[choice_id])


    def __init__(self, order_id, item_01, item_02):
        self.order_id = order_id 
        self.item_01 = item_01
        self.item_02 = item_02

        ''' I can not get it how can I save data from drop down list'''
@app.route('/', methods=['GET', 'POST'])
def index():
    form = ChoiceForm(csrf_enabled=True)
    if form.validate_on_submit():
        ''' get instance of version from form data'''
        item = Order(
                    form.x1.data,
                    form.opts.data,
                    form.xx.data,
                    )

        db.session.add(item)
        db.session.commit()


        return render_template('result.html',form=form)

    return render_template('index.html',form=form)


@app.route('/', methods=['GET', 'POST'])
def result():

    return render_template('result.html', form = form, xx = xx, x1 = x1)



if __name__ == '__main__':
    app.run(debug=True)

我认为问题出在这个声明上:

item = Order(
                    form.x1.data,
                    form.opts.data,
                    form.xx.data,
                    )

尝试将其更改为

item = Order( var1 = form.x1.data, var2 = form.opts.data, var3 = form.xx.data)

其中 var1、var2 和 var3 是 Order 表的列名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM