summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
Diffstat (limited to 'django')
-rw-r--r--django/forms/widgets.py26
1 files changed, 25 insertions, 1 deletions
diff --git a/django/forms/widgets.py b/django/forms/widgets.py
index b4a9583364..ab7c0f755f 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -406,17 +406,41 @@ class MultipleHiddenInput(HiddenInput):
class FileInput(Input):
+ allow_multiple_selected = False
input_type = "file"
needs_multipart_form = True
template_name = "django/forms/widgets/file.html"
+ def __init__(self, attrs=None):
+ if (
+ attrs is not None
+ and not self.allow_multiple_selected
+ and attrs.get("multiple", False)
+ ):
+ raise ValueError(
+ "%s doesn't support uploading multiple files."
+ % self.__class__.__qualname__
+ )
+ if self.allow_multiple_selected:
+ if attrs is None:
+ attrs = {"multiple": True}
+ else:
+ attrs.setdefault("multiple", True)
+ super().__init__(attrs)
+
def format_value(self, value):
"""File input never renders a value."""
return
def value_from_datadict(self, data, files, name):
"File widgets take data from FILES, not POST"
- return files.get(name)
+ getter = files.get
+ if self.allow_multiple_selected:
+ try:
+ getter = files.getlist
+ except AttributeError:
+ pass
+ return getter(name)
def value_omitted_from_data(self, data, files, name):
return name not in files