2

ユーザーが Django で任意の数のファイルをアップロードできるようにする最善の方法は何ですか?

ユーザーに最大 2 つのファイルのアップロードを許可することを知っていれば、これを自分のforms.py...

from django import forms

class UploaderForm(forms.Form):
    file1 = forms.FileField(upload_to='user_files')
    file2 = forms.FileField(upload_to='user_files')

...そしてこれは私のviews.py...

...
if request.method == 'POST':
    form = UploaderForm(request.POST)
    if form.is_valid():
        form.save()
        # do something.
else:
    form = UploaderForm()
...

ただし、フロントエンドで Javascript を使用して、ユーザーが新しい<input type="file" name="fileN" />要素を継続的に追加できるようにすることを計画しています (N は、ページに追加された N 番目のファイル アップロード フィールドです)。ユーザーは、1 つ以上のファイルを選択してアップロードを行うことを選択できます。 .

これを達成するために Django の組み込みフォームを使用できる方法はありますか?

私が疑うように、Django フォームを使用してフォームを生成できない場合、Django の検証を使用できますか? つまり、自分で検証を行う代わりにform.cleaned_data['file0']、 、 などにアクセスできると便利です。form.cleaned_data['file1']

ありがとう。

4

1 に答える 1

3

フォームセットはまさにあなたが必要とするものです。
http://docs.djangoproject.com/en/dev/topics/forms/formsets/#formsets

あなたがしなければならないのは、フォームセットが'form-0-field'代わりにあなたのjavascriptで使用するフィールド命名フォーマットに従うことですfileN

また、form-TOTAL_FORMSそれに応じて変更します。ドキュメントを確認してください。特にこれについては徹底しています。

class UploaderForm(forms.Form):
    file1 = forms.FileField(upload_to='user_files')


from django.forms.formsets import formset_factory
UploaderFormset = formset_factory(UploaderForm)

# long as you specify 'form-TOTAL_FORMS' and 2 other fields listed in the docs,
# the formset will auto generate form instances & populate with fields based on
# their 0 index.
formset = UploaderFormset(request.POST)

for form in formset.forms:
    form.save()

最良の部分は、これが検証に完全に結びついており、エラーメッセージのフォームを再表示することもできることです(ajaxを介してhtmlを生成するだけの場合は少し面倒です)

于 2011-02-24T23:58:52.473 に答える