0

しばらく答えを探していましたが、これがどのように起こるのか本当にわかりません。2 つのファイルを受け取るフォームを作成しようとしており、名前と拡張子が正しいかどうかを確認するために clean() メソッドをオーバーライドしています。これは私が持っているものです:

def clean(self):
  cleaned_data = super(UploadForm, self).clean()
  obs_filename = cleaned_data.get('obs').name.split('.')
  nav_filename = cleaned_data.get('nav').name.split('.')
  if obs_filename[0] != nav_filename[0] or [obs_filename[1], nav_filename[1]] != ['obs', 'nav']:
     raise forms.ValidationError('Filenames do not match.')
  if os.path.isfile(PROJECT_ROOT + '/data/unprocessed/' + '.'.join(obs_filename)) and os.path.isfile(PROJECT_ROOT + '/data/unprocessed/' + '.'.join(nav_filename)):
     raise forms.ValidationError('Files already exist.')
  return cleaned_data

問題は、これを使用すると、入力のチェックが機能しないことです (フォームはファイルを選択せず​​に送信されます)。このコードを削除すると、正常に動作します。への呼び出しsuper(UploadForm, self).clean()は、カスタム clean() 関数の django ドキュメントと同じです。私はジャンゴ1.4を使用しています。何かご意見は?

ありがとう!

4

1 に答える 1

2

ファイル フィールドはもう少し複雑です。インスタンス化するときに、ファイルがフォームにバインドされていることを確認する必要があります。クラスベースのジェネリック ビューを使用している場合、これは自動的に行われるはずです。その場合は、https://docs.djangoproject.com/en/1.4/ref/forms/api/#binding-uploaded-filesをご覧ください。つまり、フォームをインスタンス化するときは、ファイルを取得しrequest.FILESてフォームに別の引数として渡す必要がありますf = MyForm(request.POST, request.FILES)

また、HTML のタグにあることを確認enctype="multipart/form-data"してください。FORM

于 2012-07-06T09:56:04.490 に答える