diff --git a/trytond/trytond/ir/message.xml b/trytond/trytond/ir/message.xml
index 7f603fd0bd..19a4e4da59 100644
--- a/trytond/trytond/ir/message.xml
+++ b/trytond/trytond/ir/message.xml
@@ -151,6 +151,12 @@ this repository contains the full copyright notices and license terms. -->
This record is part of the base configuration.
+
+ Missing values for last column.
+
+
+ Missing values for %(n)s last columns.
+
Relation not found: %(value)r in "%(model)s" (%(column)s).
diff --git a/trytond/trytond/model/modelstorage.py b/trytond/trytond/model/modelstorage.py
index a848473cd6..93afbede0f 100644
--- a/trytond/trytond/model/modelstorage.py
+++ b/trytond/trytond/model/modelstorage.py
@@ -1050,12 +1050,16 @@ class ModelStorage(Model):
todo = set()
prefix_len = len(prefix)
many2many = set()
+ if len(fields_names) > len(line):
+ n = len(fields_names) - len(line)
+ if n > 1:
+ raise ImportDataError(gettext(
+ 'ir.msg_import_data_missing_columns', n=n))
+ else:
+ raise ImportDataError(gettext(
+ 'ir.msg_import_data_missing_column'))
# Import normal fields_names
for i, field in enumerate(fields_names):
- if i >= len(line):
- raise Exception('ImportError',
- 'Please check that all your lines have %d cols.'
- % len(fields_names))
is_prefix_len = (len(field) == (prefix_len + 1))
value = line[i]
column = '/'.join(field)
@@ -1155,8 +1159,6 @@ class ModelStorage(Model):
ModelData = pool.get('ir.model.data')
- len_fields_names = len(fields_names)
- assert all(len(x) == len_fields_names for x in data)
fields_names = [x.split('/') for x in fields_names]
fields_def = cls.fields_get()
diff --git a/trytond/trytond/tests/import_data.py b/trytond/trytond/tests/import_data.py
index e5eef27c22..c824eaf3c9 100644
--- a/trytond/trytond/tests/import_data.py
+++ b/trytond/trytond/tests/import_data.py
@@ -5,6 +5,13 @@ from trytond.model import ModelSQL, fields
from trytond.pool import Pool
+class ImportData(ModelSQL):
+ "Import Data"
+ __name__ = 'test.import_data'
+ name = fields.Char("Name")
+ value = fields.Integer("Value")
+
+
class ImportDataBoolean(ModelSQL):
"Import Data Boolean"
__name__ = 'test.import_data.boolean'
@@ -176,6 +183,7 @@ class ImportDataUpdate(ModelSQL):
def register(module):
Pool.register(
+ ImportData,
ImportDataBoolean,
ImportDataInteger,
ImportDataFloat,
diff --git a/trytond/trytond/tests/test_importdata.py b/trytond/trytond/tests/test_importdata.py
index cb781a4ac0..d95347725d 100644
--- a/trytond/trytond/tests/test_importdata.py
+++ b/trytond/trytond/tests/test_importdata.py
@@ -18,6 +18,18 @@ class ImportDataTestCase(unittest.TestCase):
def setUpClass(cls):
activate_module('tests')
+ @with_transaction()
+ def test_missing_values(self):
+ "Test error is raised when missing values"
+ pool = Pool()
+ Model = pool.get('test.import_data')
+
+ with self.assertRaisesRegex(ImportDataError, "for last column"):
+ Model.import_data(['name'], [["Test"], []])
+
+ with self.assertRaisesRegex(ImportDataError, "for 2 last column"):
+ Model.import_data(['name', 'value'], [["Test", 1], []])
+
@with_transaction()
def test_boolean(self):
'Test boolean'