我试图在一列中存储2个值,我不知道它是否可能。
看起来像那样。我从HTML表单中获取数据,如下所示。它有效。
<form action="{{url_for('newBook')}}" method = 'POST'>
<p>Choose Language</p>
<select name=language method="GET" action="/" size="2" multiple>
{% for language in languages %}
<option value= "{{language}}" SELECTED>{{ language }}</option>"
{% endfor %}
</select>
<p><input type='submit' value='Create'></p>
<a href = "{{url_for('showBooks') }}">Cancel</a>
</form>
但它只在数据库中存储了一个值。
class Book(Base):
__tablename__ = 'Book'
language = Column(String(30)) # how change that?
这就是我获得这个价值的方式。
languages = ['Polish', 'English']
@app.route('/books/new/', methods=['GET', 'POST'])
def newBook():
if request.method == 'POST':
newBook = Book(language = request.form['language']) # how change that?
session.add(newBook)
session.commit()
flash("New Book Added!")
return redirect(url_for('showBooks'))
else:
return render_template('newBook.html', languages=languages)
该代码有效,但我只获得英语或波兰语价值。但我希望我能存储两个值。我知道可以使用request.form.getlist,但我没有找到一个有效的例子,以及如何将它存储在数据库中。
答案 0 :(得分:0)
要从select元素中检索多个值,您可以将代码更改为:
languages = ['Polish', 'English']
@app.route('/books/new/', methods=['GET', 'POST'])
def newBook():
if request.method == 'POST':
newBooks = request.form.getlist('language') # this returns a list of values
session.add(newBook)
session.commit()
flash("New Book Added!")
return redirect(url_for('showBooks'))
else:
return render_template('newBook.html', languages=languages)
至于将它们存储在数据库中,您可以创建另一个存储语言的表,并使用外键链接回Book
表。