Flask-wtforms 无法识别要在 Flask 应用程序中上传的附件

Flask-wtforms doesn't recognize attached file to be uploaded in Flask app

我有一个包含 FileField 的表单,用于上传个人资料图片以及其他一些字段, 我在数据库中将 FileField 配置为不接受 NULL。 当我尝试使用此表单更新数据时,我收到一条错误消息,指出在我选择个人资料图片时图像字段不接受 NULL,但它好像没有识别出我有。

我收到错误

sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: employee.image_file
[SQL: UPDATE employee SET ext_no=?, image_file=? WHERE employee.id = ?]

forms.py

class UpdateEmployeeForm(FlaskForm):
    first_name = StringField(
        "First Name", validators=[DataRequired(), Length(min=1, max=20)]
    )
    last_name = StringField(
        "Last Name", validators=[DataRequired(), Length(min=1, max=20)]
    )
    picture = FileField(
        "Update Profile Picture", validators=[FileAllowed(["jpg", "png"])]
    )
    submit = SubmitField("Update")

routes.py

@users.route("/employee/<int:employee_id>/update", methods=["GET", "POST"])
@login_required
def update_employee(employee_id):
    employee = Employee.query.get_or_404(employee_id)
    if employee.organization != current_user:
        abort(403)
    form = UpdateEmployeeForm()
    if form.validate_on_submit():
        employee.first_name = form.first_name.data
        employee.last_name = form.last_name.data
        employee.image_file = form.picture.data
        db.session.commit()
        flash("Employee data has been updated!", "success")
        return redirect(url_for("users.employees"))
    elif request.method == "GET":
        form.first_name.data = employee.first_name
        form.last_name.data = employee.last_name
    image_file = url_for("static", filename="profile_pics/" + employee.image_file)
    return render_template(
        "users/add_employee.html",
        title="Update Employee",
        form=form,
        employee=employee,
        image_file=image_file,
    )

add_employee.html

<img class="rounded-circle account-img" src="{{ image_file }}">
            <div class="form-group">
                {{ form.picture.label() }}
                {{ form.picture(class="form-control-file") }}
                {% if form.picture.errors %}
                {% for error in form.picture.errors %}
                <span class="text-danger">{{ error }}</span></br>
                {% endfor %}
                {% endif %}
            </div>

我想通了,在 html 文件中添加 enctype="multipart/form-data" 解决了这个问题

    <form method="POST" action="" enctype="multipart/form-data">