基本上我正在尝试将表单数据从查询选择字段发送到数据库。我遇到的问题是我似乎找不到一种格式化数据的方法,以免同时显示对象名称和实际对象值。 从名为 company 的表中,我检索表中存储的三个值; A公司、B公司、C公司
举个例子,在名为 Company 的表中,如果我在 form.validate 函数中执行打印命令,结果始终显示为 [Company Company A]。因此,我无法将该数据添加到另一个表中,因为它不只显示数据中的公司 A。
queryselectfield 显示公司名称很好,但是在 form.validate 之后读取数据时,它会将其解释为 [Company Company A]
所以要分解它...
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)
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')
@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)
{% 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 %}
{% 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)值,而不是对象名称(如果有意义的话)。我希望我已经把所有的东西都写进去了。
通过反复试验,并且主要是重新阅读材料,我终于意识到我的问题在于返回函数。
def str(自身): 返回 '[公司 {}]'.format(self.company)
更改为:
def repr(自我): 返回 '{}'.format(self.company)
我终于可以睡个好觉了。