2017-03-13 4 views
6

「を提出する」、私は次のエラーを取得する: -変形ファイルのアップロードが無効pstructと私のエラーメッセージが上書きされます:私は、ファイルを選択してクリックするだけでない場合ではないのFieldStorageインスタンス

Invalid pstruct: {'upload': "b'' is not a FieldStorage instance"} 

これではありません動作私はdeform demo siteにそれが空のままにすると、より合理的な '必須'エラーメッセージが表示されます。以下のように自分のバリデータを使用して

は、問題を解決しない: -

def validate_file(node, value, **kwargs): 
    if not value: 
     raise colander.Invalid(node, "Please select a file") 

class Schema(colander.MappingSchema): 
    excel_file = colander.SchemaNode(deform.FileData(), 
      widget=deform.widget.FileUploadWidget(tmpstore), 
      validator=validate_file) 

私は、エラーが発生したことを確認することができますが、form.validateから電子がValidationFailureあるe.render()の出力はエラーと一致していません自体。関連するdeformのソースコードは、クラスが属性を持っているかどうかをチェックし、それ自身のInvalid例外が発生する「widget.py」にあります。

ここでは、検証呼び出しを実行する関数(実際にはbog標準のもの)があり、レンダリングされたページを返します。私はdeformコードベースをサル、パッチ適用せずに自分のエラーメッセージを表示するにはどうすればよい

def generate_upload_form(request): 
    form = deform.Form(upload_schema, buttons=('submit',)) 
    if getattr(request, 'POST') and 'submit' in request.POST: 
     try: 
      value_dict = form.validate(request.POST.items()) 
     except deform.ValidationFailure as e: # Invalid form 
      form = e.render() 
     else: # Successfully validated, now do operation 
      upload_form_operation(request, value_dict) 
    if isinstance(form, deform.Form): 
     form = form.render() 
    return form 

+0

を失敗する文字列としてファイル名を送信しますhttps://www.bountysource.com/issues/43000745-fileuploadwidget-raises-error-if-file -is-not-provided –

答えて

1

実際にフォームデータを正しく送信してもよろしいですか?このエラーは通常、変形がアヒルのタイピングによって提出された値を逆シリアル化しようとしたときに発生します。

見落としがちな特定のアイテムの1つは、HTMLフォームに追加のエンティティタイプ定義があることを確認することです。このなし

enctype="multipart/form-data" 

フォームはその後も参照してください

+0

これは今のところシステムにアクセスできないかもしれませんが、form.render()から直接htmlを使ってフォームを定義しているわけではありません。これはバグです(実際の問​​題だとします)? –

+0

システムを確認した後、フォームenctypeは実際にmultipart/form-dataなので、これは問題の原因ではありません。 –

+0

@ NgOon-Ee私はもう少しコードを見る必要があると思う。発生した例外を実際に検証して処理する方法を確認することは可能ですか? –

関連する問題