admin: warn if a form contains more than 500 fields (#20963)
This commit is contained in:
parent
200a391e6d
commit
5dbb87ef43
|
@ -1249,6 +1249,40 @@ def test_form_edit_map_field(pub):
|
|||
resp = resp.form.submit('submit')
|
||||
assert 'widget-with-error' in resp.body
|
||||
|
||||
def test_form_edit_field_warnings(pub):
|
||||
create_superuser(pub)
|
||||
create_role()
|
||||
|
||||
FormDef.wipe()
|
||||
formdef = FormDef()
|
||||
formdef.name = 'form title'
|
||||
formdef.fields = [fields.StringField(id='%d' % i, label='field %d' % i, type='string')
|
||||
for i in range(1,10)]
|
||||
formdef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/forms/1/')
|
||||
resp = resp.click(href='fields/')
|
||||
assert 'more than 500 fields' not in resp.body
|
||||
assert 'first field should be of type "page"' not in resp.body
|
||||
|
||||
formdef.fields.append(fields.PageField(id='1000', label='page', type='page'))
|
||||
formdef.store()
|
||||
resp = app.get('/backoffice/forms/1/')
|
||||
resp = resp.click(href='fields/')
|
||||
assert 'more than 500 fields' not in resp.body
|
||||
assert 'first field should be of type "page"' in resp.body
|
||||
|
||||
formdef.fields.extend([fields.StringField(id='%d' % i, label='field %d' % i, type='string')
|
||||
for i in range(10,510)])
|
||||
formdef.store()
|
||||
resp = app.get('/backoffice/forms/1/')
|
||||
resp = resp.click(href='fields/')
|
||||
assert 'more than 500 fields' in resp.body
|
||||
assert 'first field should be of type "page"' in resp.body
|
||||
|
||||
FormDef.wipe()
|
||||
|
||||
def test_form_limit_display_to_page(pub):
|
||||
create_superuser(pub)
|
||||
create_role()
|
||||
|
|
|
@ -202,6 +202,12 @@ class FieldsDirectory(Directory):
|
|||
r += self.index_top()
|
||||
|
||||
if self.objectdef.fields:
|
||||
if len(self.objectdef.fields) > 500:
|
||||
r += htmltext('<div class="errornotice">')
|
||||
r += htmltext(_('This form contains more than 500 fields. '
|
||||
'It is close to the database limits and no new fields should be added.'))
|
||||
r += htmltext('</div>')
|
||||
|
||||
if [x for x in self.objectdef.fields if x.type == 'page']:
|
||||
if self.objectdef.fields[0].type != 'page':
|
||||
r += htmltext('<div class="errornotice">')
|
||||
|
|
Loading…
Reference in New Issue