【发布时间】:2020-11-05 11:26:06
【问题描述】:
环境:
Python 3.7.7
烧瓶 1.1.2
Werkzeug 1.0.1
简介:
我制作了一个 Flask 应用程序,我的用户可以在其中添加一些“平台”并对其进行编辑。每个平台都有一个类别。
例如:
平台“Facebook”属于“社交网络”类别。
平台“Instagram”属于“社交网络”类别。
平台“Google”属于“搜索引擎”类别。
新建“平台”和编辑“平台”使用相同的表单和相同的模板。在这种形式中,有一个 QuerySelectField 从数据库查询中加载类别值。
当用户想要编辑“平台”时,他打开“平台”表单,其中“平台”的值被填写在字段中。这是一种典型的形式,在互联网上随处可见。
新的“平台”表单运行良好。
编辑“平台”表单与 QuerySelectField 存在问题。
我成功地在“平台”表单的文本字段中填写了“平台”的值,但是 QuerySelectField(类别)存在问题。它不想预先选择平台类别的值。
代码:
我的表单.py
def GetCategories():
"""
This function is to fill the selectdropdown field of the form NewPlatformForm
:return:
"""
return Category.query
class NewPlatformForm(FlaskForm):
name = StringField('Name', validators=[DataRequired(), Length(min=2, max=20)])
category = QuerySelectField('Category', validators=[DataRequired()], query_factory=GetCategories, get_label='name')
image = StringField('Image',validators=[DataRequired(), Length(min=4, max=100)])
description = TextAreaField('Description',render_kw={'rows':20},validators=[DataRequired(), Length(min=2, max=1200)])
icon_blue = StringField('Icon blue')
icon_black = StringField('Icon black')
icon_white = StringField('Icon white')
submit = SubmitField('Save')
我的路线.py
@app.route('/platform/<int:platform_id>/edit', methods=['GET', 'POST'])
@login_required
def edit_platform(platform_id):
platform = Platform.query.get_or_404(platform_id)
form = NewPlatformForm()
platforms_categories = data = db_mysql.session.query(Platform, Category).join(Category).all()
#IF USER ADD A NEW PLATFORM --------------------------------------------------------
if form.validate_on_submit():
platform.name = form.name.data
platform.category_id = form.category.data
platform.image = form.image.data
platform.description = form.description.data
platform.icon_blue_img = form.icon_blue.data
platform.icon_white_img = form.icon_white.data
platform.icon_black_img = form.icon_black.data
db_mysql.session.commit()
flash('Your platform has been updated', 'success')
return redirect(url_for('platforms'))
#IF USER EDIT AN EXISTING PLATFORM --------------------------------------------------------
elif request.method == 'GET':
print(f"platform.id_category : {platform.id_category} - {type(platform.id_category)}")
form.name.data = platform.name
form.category.data = platform.id_category #Here is the Select field which needs to preselect the Category value of platform.
form.image.data = platform.image
form.description.data = platform.description
form.icon_blue.data = platform.icon_blue_img
form.icon_white.data = platform.icon_white_img
form.icon_black.data = platform.icon_black_img
return render_template('new_platform.html', title='Edit Platform', form=form, legend='Edit Platform',categories=platforms_categories)
我尝试了什么:
我尝试了 form.category.default 而不是 form.category.data 但它没有改变任何东西。
有人可以帮帮我吗?
【问题讨论】:
标签: python python-3.x flask flask-sqlalchemy flask-wtforms