2015-03-25 2 views
1

Я использую 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() 
+0

Вместо того, чтобы редактировать свой вопрос, добавить свой ответ отдельно. – davidism

ответ

0

Я не вижу FileRequired() валидаторов в доке. Вы пробовали Required()?

+0

Проверка файлов в файловом модуле. from flask.ext.wtf.file import FileRequired, FileField, FileAllowed BTW Я уже решил проблему .. я обновил свой вопрос с помощью решения :) thnx btw – leppy

0

Изменить

form = addVendorForm(request.form) 

Для

form = addVendorForm() 
Смежные вопросы