FileField в FlaskForm всегда выдает значение типа string
Обработчик формы
@movie_blueprint.route("/add_movie", methods=["POST", "GET"])
def add_movie():
form = AddFilm()
if request.method == 'POST':
m = Movie()
session = db_session.create_session()
m.name = form.name.data
m.genre = form.genre.data
m.description = form.description.data
m.year = form.year.data
file = form.poster.data
session.add(m)
session.commit()
path = os.path.abspath(os.path.join("app/static/posters", f"{m.id}.jpg"))
file.save(path)
return redirect('/')
return render_template("add_film.html", form=form)
html
{% block form %}
<form class="login-form" action="" method="post">
<h1>Add a movie</h1>
<p>
{{ form.name.label }}<br>
{{ form.name(class="form-control", type="name") }}<br>
{% for error in form.name.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>
{{ form.genre.label }}<br>
{{ form.genre(class="form-control", type="genre") }}<br>
{% for error in form.genre.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>
{{ form.year.label }}<br>
{{ form.year(class="form-control", type="year") }}<br>
{% for error in form.year.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>
{{ form.description.label }}<br>
{{ form.description(class="form-control", type="description") }}<br>
{% for error in form.description.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>
{{ form.poster.label }}<br>
{{ form.poster(class="form-control", type="file") }}<br>
{% for error in form.poster.errors %}
<div class="alert alert-danger" role="alert">
{{ error }}
</div>
{% endfor %}
</p>
<p>{{ form.submit(type="submit", class="btn btn-dark") }}</p>
<div>{{ message }}</div>
</form>
{% endblock %}
Flask Form
class AddFilm(FlaskForm):
name = StringField("Name", validators=[DataRequired()])
genre = StringField("Genre", validators=[DataRequired()])
year = IntegerField("Year", validators=[DataRequired()])
description = TextAreaField("Description")
poster = FileField("Poster")
submit = SubmitField("Add Movie")