Skip to content

Usage

Usage

1 Install django-file-form

pip install django-file-form

2 Add the apps to your INSTALLED_APPS

You must include django_file_form

INSTALLED_APPS = [
    "django_file_form",
]

3 Add the app to your URLs

This example uses the URL upload/. You can use a different URL if you like.

urlpatterns = patterns(
    "",
    url(r"^upload/", include("django_file_form.urls")),
)

4 Add FileFormMixin to your form

from django_file_form.forms import FileFormMixin


class ExampleForm(FileFormMixin, forms.Form):
    pass

5 Add a UploadedFileField

from django_file_form.forms import FileFormMixin, UploadedFileField


class ExampleForm(FileFormMixin, forms.Form):
    input_file = UploadedFileField()

Import and use MultipleUploadedFileField if you intent to add multiple files.

6 Include JavaScript and CSS in your template

<script src="{% static "file_form/file_form.min.js" %}"></script>
<link rel="stylesheet" href="{% static "file_form/file_form.css" %}">

There is also an uncompressed JavaScript version: file_form/file_form.js.

7 Call the initUploadFields JavaScript function

<form id="example-form" method="POST" enctype="multipart/form-data">
  {% csrf_token %} {{ form }}
</form>

<script>
  initUploadFields(document.getElementById("example-form"));
</script>

If your form has a prefix, then call initUploadFields as follows:

// for example, with prefix 'abc'
initUploadFields(document.getElementById("example-form"), { prefix: "abc" });

See the Django documentation for more information about form prefixes.

8 Handle uploaded files

class ExampleFormView(generic.FormView):
    template_name = "example_form.html"
    form_class = forms.ExampleForm

    def form_valid(self, form):
        input_file = form.cleaned_data["input_file"]

        return super(ExampleFormView, self).form_valid(form)

9 Delete temporary files

class ExampleFormView(generic.FormView):
    template_name = "example_form.html"
    form_class = forms.ExampleForm

    def form_valid(self, form):
        input_file = form.cleaned_data["input_file"]

        form.delete_temporary_files()

        return super(ExampleFormView, self).form_valid(form)

It's also possible to delete unused temporary file using a management command:

python manage.py delete_unused_files

The command deletes temporary files and records that are created at least one day ago. It also deletes files of uploads that were never finished, once the upload has expired (see FILE_FORM_CACHE_TIMEOUT). Files of uploads that are still in progress are kept.

Use --dry-run to see which files would be deleted, without deleting them:

python manage.py delete_unused_files --dry-run