「を提出する」、私は次のエラーを取得する: -変形ファイルのアップロードが無効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
?
を失敗する文字列としてファイル名を送信しますhttps://www.bountysource.com/issues/43000745-fileuploadwidget-raises-error-if-file -is-not-provided –