私は最終的に、拡張子の種類ごとにFileFieldを検証しようとしています。しかし、このフィールドのクリーンなメソッドでPOST値を取得することさえできません。
from django.forms.forms import Form
from django.forms.fields import FileField
from django.forms.util import ValidationError
class TestForm(Form):
file = FileField(required=False)
def clean_file(self):
value = self.cleaned_data["file"]
print "clean_file value: %s" % value
return None
@localhost
def test_forms(request):
form = TestForm()
if request.method == "POST":
form = TestForm(request.POST)
if form.is_valid():
print "form is valid"
return render_to_response("test/form.html", RequestContext(request, locals()))
コードを実行すると、次の出力が表示されます。
clean_file value: None
form is valid
つまり、clean_fileメソッドはファイルデータを取得できません。同様に、Noneを返した場合でも、フォームは有効です。
これが私のフォームhtmlです:
<form enctype="multipart/form-data" method="post" action="#">
<input type="file" id="id_file" name="file">
<input type="submit" value="Save">
</form>
この問題の解決策が記載されたスニペットをいくつか見ましたが、モデル以外のフォームで機能させることはできません。どちらもカスタムフィールドタイプを宣言します。そうすると、同じ問題が発生します。super()を呼び出すと、Noneオブジェクトが返されます。