sql: do not fail indexing on missing block (#54384)

This commit is contained in:
Frédéric Péters 2021-05-28 15:22:38 +02:00
parent 08bb5f7387
commit d8b7b5342b
2 changed files with 23 additions and 2 deletions

View File

@ -419,6 +419,23 @@ def test_sql_get_ids_from_query():
assert set(ids) == set([id4])
def test_sql_fts_index_with_missing_block():
data_class = formdef.data_class(mode='sql')
data_class.wipe()
formdata = data_class()
formdata.data = {
'7': {
'data': [
{'1': 'some other example having foo', '2': 'boat', '2_display': 'Yatch'},
{'1': 'bar', '2': 'plane', '2_display': 'Cessna'},
]
}
}
BlockDef.wipe()
formdata.store()
def test_sql_rollback_on_error():
data_class = formdef.data_class(mode='sql')
data_class.wipe()

View File

@ -2103,8 +2103,12 @@ class SqlDataMixin(SqlMixin):
for field in self._formdef.get_all_fields():
if field.key == 'block' and self.data.get(field.id):
for data in self.data[field.id].get('data'):
for subfield in field.block.fields:
yield subfield, data
try:
for subfield in field.block.fields:
yield subfield, data
except KeyError:
# block doesn't exist anymore
break
else:
data = self.data
yield field, self.data