【发布时间】:2020-09-06 09:08:53
【问题描述】:
我有一个应用程序,用户可以在其中添加、更新和删除虚拟助手。为了更新它们,我使用了 populate_obj 方法。它从原始虚拟助手中获取所有字段,例如姓名、姓氏,并以更新形式填充字段,但不填充图像字段。因为该用户必须上传照片,即使他不想更新这一行。例如:用户只想更新姓名,他按下按钮更新,写新姓名,然后按下按钮提交,然后他得到信息“选择照片”,但他不需要写新的姓氏它已填充,我想要与照片相同。我想知道这里有什么解决方案?我的意思是如何填充照片行,以便用户不必每次都选择照片?
型号
class VirtualAssistant(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(30))
last_name = db.Column(db.String(30))
image_filename = db.Column(db.String)
image_url = db.Column(db.String)
查看:
@app.route("/update/<int:id>/", methods=["GET", "POST"])
def update_virtual_assistant(id):
updated_virtual_assistant = VirtualAssistant.query.get_or_404(id)
form = UpdateVirtualAssistant(obj=updated_virtual_assistant)
if request.method == "POST":
if form.validate_on_submit():
form.populate_obj(updated_virtual_assistant)
if "photo" in request.files:
photo = request.files["photo"]
filename = photos.save(form.photo.data)
url = photos.url(filename)
path = "C:\\Users\\Luiza\\VirtualAssistants\\static\\img\\" + filename
resize_photo(path)
updated_virtual_assistant.image_url = url
updated_virtual_assistant.image_filename = filename
db.session.commit()
return "the virtual assistant has been updated"
return render_template("UpdateVirtualAssistant.html", updated_virtual_assistant=updated_virtual_assistant, form=form)
表格:
class AddVirtualAssistant(FlaskForm):
name = StringField("name", validators=[DataRequired()])
last_name = StringField("last_name", validators=[DataRequired()])
photo = FileField("photo", validators=[DataRequired()])
class UpdateVirtualAssistant(AddVirtualAssistant):
id = IntegerField("id", validators=[DataRequired()])
HTML:
<form method="POST" enctype="multipart/form-data">
{{ form.csrf_token }}
{{ form.id }}</br>
{{ form.name }}</br></br>
{{ form.last_name }}</br></br>
{{ form.photo }}</br></br>
<button type="submit">Update assistant</button>
</form>
【问题讨论】: