form: make it possible to specify the expected file type (#5732)

This commit is contained in:
Frédéric Péters 2014-10-23 17:27:42 +02:00
parent d19b4ce3be
commit 978a2dd764
2 changed files with 20 additions and 2 deletions

View File

@ -619,8 +619,22 @@ register_field_class(BoolField)
class FileField(WidgetField):
key = 'file'
description = N_('File Upload')
file_type = []
widget_class = FileWithPreviewWidget
extra_attributes = ['file_type']
def fill_admin_form(self, form):
WidgetField.fill_admin_form(self, form)
file_types = [
('audio/*', _('Sound files')),
('video/*', _('Video files')),
('image/*', _('Image files'))]
form.add(CheckboxesWidget, 'file_type', title=_('File type suggestion'),
value=self.file_type, elements=file_types, inline=True)
def get_admin_attributes(self):
return WidgetField.get_admin_attributes(self) + ['file_type']
def get_view_value(self, value):
return htmltext('<a download="%s" href="[download]?f=%s">%s</a>') % (

View File

@ -486,6 +486,7 @@ class FileWithPreviewWidget(CompositeWidget):
ondisk so it has a "readonly" mode where the filename is shown."""
extra_css_class = 'file-upload-widget'
file_type = None
def __init__(self, name, value=None, **kwargs):
CompositeWidget.__init__(self, name, value, **kwargs)
@ -493,8 +494,11 @@ class FileWithPreviewWidget(CompositeWidget):
self.preview = kwargs.get('readonly')
self.add(HiddenWidget, 'token')
if not self.preview:
self.add(FileWidget, 'file', render_br=False,
attrs={'data-url': get_publisher().get_root_url() + 'tmp-upload'})
attrs = {'data-url': get_publisher().get_root_url() + 'tmp-upload'}
self.file_type = kwargs.pop('file_type', None)
if self.file_type:
attrs['accept'] = ','.join(self.file_type)
self.add(FileWidget, 'file', render_br=False, attrs=attrs)
if value:
self.set_value(value)