forms: allow prefilling of file fields (#46929)

This commit is contained in:
Frédéric Péters 2022-09-24 20:33:04 +02:00
parent e896f16093
commit 0a9ba667cf
2 changed files with 26 additions and 0 deletions

View File

@ -396,3 +396,26 @@ def test_form_file_field_with_wrong_value(pub):
assert logged_error.summary == 'Failed to set value on field "file"'
assert logged_error.exception_class == 'AttributeError'
assert logged_error.exception_message == "'str' object has no attribute 'time'"
def test_form_file_field_prefill(pub):
FormDef.wipe()
formdef = FormDef()
formdef.name = 'test'
formdef.fields = [
fields.FileField(
id='0',
label='file',
prefill={'type': 'string', 'value': '{{ "test"|qrcode }}'},
)
]
formdef.store()
resp = get_app(pub).get('/test/')
assert resp.form['f0$token']
assert resp.click('qrcode.png').content_type == 'image/png'
resp = resp.form.submit('submit') # -> validation
resp = resp.form.submit('submit') # -> submit
formdata = formdef.data_class().select()[0]
assert formdata.data['0'].base_filename == 'qrcode.png'
assert formdata.data['0'].get_content().startswith(b'\x89PNG')

View File

@ -1672,6 +1672,9 @@ class FileField(WidgetField):
def get_view_short_value(self, value, max_len=30, **kwargs):
return self.get_view_value(value, include_image_thumbnail=False, max_len=max_len, **kwargs)
def get_prefill_value(self, user=None, force_string=True):
return super().get_prefill_value(user=user, force_string=False)
def get_download_query_string(self, **kwargs):
if kwargs.get('file_value'):
return 'hash=%s' % kwargs.get('file_value').file_digest()