Я использую Flask-WTF для проверки моей формы, но для FileField она не проверяется правильно, она не обнаруживает файл.[Solved]: Проверка FileField с использованием Flask не работает должным образом
form.py
class addVendorForm(Form):
name = StringField('Vendor Name',
validators=[Required()],
description='Eg. Alcatel Lucent'
)
remarks = TextAreaField('Remarks', widget=TextArea())
profile = StringField('Profile', widget=TextArea())
file = FileField('Logo',validators=[
FileRequired()])
short_hand = StringField(validators=[
Required()])
notified = BooleanField()
views.py
@application.route('/memo', methods=['GET','POST'])
@application.route('/memo/<int:record_id>', methods=['GET','POST'])
@login_required
def add_memo(record_id=None):
if record_id is None:
record = Vendor()
form = addVendorForm(request.form)
else:
record = Memo.query.filter_by(id=record_id).first_or_404()
form = addMemoForm(obj=record)
if request.method == 'POST' and form.validate():
form.populate_obj(record)
db.session.add(record)
upload()
db.session.commit()
flash('<strong>Success!</strong> Database Updated.')
return redirect(url_for('add_memo'))
return render_template('add-form.html', form=form)
И, кажется, что форма объекта не держит файл.
>>> pp(form.file.__dict__)
'data': u'',
'default': None,
'description': u'',
'errors': [],
'filters':(),
'flags': <wtforms.fields.Flags: {}>,
'id': 'file',
'label': Label('file', 'Logo'),
'meta': <wtforms.form.Meta object at 0x7f9ac40e80d0>,
'name': 'file',
'object_data': None,
'process_errors': [],
'raw_data': [],
'short_name': 'file',
'type': 'FileField',
Но это в запросе.
>>> pp(request.files)
ImmutableMultiDict([('file', <FileStorage: u'cleaned data.xlsx' ('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')>)])
Какой еще метод проверки можно применить? Мне просто нужно реализовать FileRequired.
UPDATE: Решение
Изменить
form = addVendorForm(request.form)
Для
form = addVendorForm()
Вместо того, чтобы редактировать свой вопрос, добавить свой ответ отдельно. – davidism