changeset c0b209d2dcd7 in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset&node=c0b209d2dcd7
description:
Ignore invalid Reference field when reading related fields
issue11484
review449081003
diffstat:
trytond/model/fields/reference.py | 2 +-
trytond/model/modelsql.py | 15 +++++++++++----
trytond/tests/test_modelsql.py | 32 ++++++++++++++++++++++++++++++++
3 files changed, 44 insertions(+), 5 deletions(-)
diffs (86 lines):
diff -r d45dd226ac5c -r c0b209d2dcd7 trytond/model/fields/reference.py
--- a/trytond/model/fields/reference.py Thu May 19 22:00:57 2022 +0200
+++ b/trytond/model/fields/reference.py Thu May 19 22:02:33 2022 +0200
@@ -135,7 +135,7 @@
continue
try:
ref_id = int(ref_id)
- except Exception:
+ except ValueError:
continue
if ref_id < 0:
continue
diff -r d45dd226ac5c -r c0b209d2dcd7 trytond/model/modelsql.py
--- a/trytond/model/modelsql.py Thu May 19 22:00:57 2022 +0200
+++ b/trytond/model/modelsql.py Thu May 19 22:02:33 2022 +0200
@@ -943,9 +943,13 @@
add = target_ids.extend
elif field._type == 'reference':
def add(value):
- id_ = int(value.split(',', 1)[1])
- if id_ >= 0:
- target_ids.append(id_)
+ try:
+ id_ = int(value.split(',', 1)[1])
+ except ValueError:
+ pass
+ else:
+ if id_ >= 0:
+ target_ids.append(id_)
else:
add = target_ids.append
for row in rows:
@@ -967,7 +971,10 @@
for row in rows:
value = row[name]
if isinstance(value, str):
- value = int(value.split(',', 1)[1])
+ try:
+ value = int(value.split(',', 1)[1])
+ except ValueError:
+ value = None
if value is not None and value >= 0:
row[key] = targets[value]
else:
diff -r d45dd226ac5c -r c0b209d2dcd7 trytond/tests/test_modelsql.py
--- a/trytond/tests/test_modelsql.py Thu May 19 22:00:57 2022 +0200
+++ b/trytond/tests/test_modelsql.py Thu May 19 22:02:33 2022 +0200
@@ -117,6 +117,38 @@
}])
@with_transaction()
+ def test_read_related_invalid_reference(self):
+ "Test read with related invalid Reference"
+ pool = Pool()
+ Model = pool.get('test.modelsql.read')
+
+ record, = Model.create(
+ [{'reference': 'test.modelsql.read.target,None'}])
+ values = Model.read([record.id], ['reference.name'])
+
+ self.assertEqual(values, [{
+ 'id': record.id,
+ 'reference.': None,
+ }])
+
+ @with_transaction()
+ def test_read_related_deleted_reference(self):
+ "Test read with related deleted Reference"
+ pool = Pool()
+ Model = pool.get('test.modelsql.read')
+ Target = pool.get('test.modelsql.read.target')
+
+ target, = Target.create([{'name': "Target"}])
+ record, = Model.create([{'reference': str(target)}])
+ Target.delete([target])
+ values = Model.read([record.id], ['reference.name'])
+
+ self.assertEqual(values, [{
+ 'id': record.id,
+ 'reference.': None,
+ }])
+
+ @with_transaction()
def test_read_related_reference_empty(self):
"Test read with empty related Reference"
pool = Pool()