从 QuerySelectField 检索值并将其发送到数据库 - python

问题描述 投票:0回答:1

基本上我正在尝试将表单数据从查询选择字段发送到数据库。我遇到的问题是我似乎找不到一种格式化数据的方法,以免同时显示对象名称和实际对象值。 从名为 company 的表中,我检索表中存储的三个值; A公司、B公司、C公司

举个例子,在名为 Company 的表中,如果我在 form.validate 函数中执行打印命令,结果始终显示为 [Company Company A]。因此,我无法将该数据添加到另一个表中,因为它不只显示数据中的公司 A。

queryselectfield 显示公司名称很好,但是在 form.validate 之后读取数据时,它会将其解释为 [Company Company A]

所以要分解它...

模型.py

class Company(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    company = db.Column(db.String(50), unique=True)
    contact = db.Column(db.String(50))

    def __str__(self):
        return '[Company {}]'.format(self.company)

表格.py

def company_query():
    return Company.query

class ChooseCompanyForm(FlaskForm):
    opts = QuerySelectField('Select Company', query_factory=company_query, allow_blank=False, get_label='company')
    submit = SubmitField('Submit')

路线.py

@app.route("/new_ticket", methods=['GET', 'POST'])
def new_ticket():
    form = ChooseCompanyForm()

    form.opts.query = Company.query.all()
    
    if form.validate_on_submit():
        #company = request.form.get('opts') # tried it this way too
        company = form.opts.data
        
        #db.session.add(company)
        #db.session.commit()

        print(company) # for debugging
        #print(form.opts.data)  # for debugging
        
        flash('A new ticket has been added to the database.', 'success')
        
        return redirect(url_for('index'))
        #return '<h1>{}</h1>'.format(form.opts.data) #for seeing returned values

    return render_template('new_ticket.html', title='Create New Ticket', form=form)

模板/new_ticket.html

{% extends "layouts.html" %}

{% block content %}
    <form action="" method="POST">
        {{ form.csrf_token }}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">New Ticket Information</legend>
            <div class="form-group">
                {{ form.opts.label(class="form-control-label") }}                     <br />
                {{ form.opts }}<br />
                <ul>
                    {% for error in form.opts.errors %}
                        <li style="color: red;">[{{ error }}]</li>
                    {% endfor %}
                </ul>
            </div>
        </fieldset>
        {{ form.submit(class="btn btn-outline-info  border-bottom mb-2") }}
    </form>

{% endblock %}

模板/index.html

{% extends "layouts.html" %}

{% block content %}
    <div class="content-section">
        <h1>Service Desk</h1>

        <div class="navbar-nav mr-auto">
            <a class="nav-item nav-link" href="{{ url_for('new_ticket') }}">New Ticket</a> <a class="nav-item nav-link" href="{{ url_for('index') }}">Home</a>                            
        </div>
    </div>

{% endblock %}

我已经尝试了所有我能找到的关于如何获取表单数据的方法。从打印命令中显示的内容如下: Windows shell 显示

我希望它从 form.opts.data 中提取时返回公司名称(公司 A、公司 B、公司 C)值,而不是对象名称(如果有意义的话)。我希望我已经把所有的东西都写进去了。

python flask flask-sqlalchemy flask-wtforms
1个回答
0
投票

通过反复试验,并且主要是重新阅读材料,我终于意识到我的问题在于返回函数。

def str(自身): 返回 '[公司 {}]'.format(self.company)

更改为:

def repr(自我): 返回 '{}'.format(self.company)

我终于可以睡个好觉了。

© www.soinside.com 2019 - 2024. All rights reserved.