diff --git a/trytond/CHANGELOG b/trytond/CHANGELOG index be9d9246d6..0501425744 100644 --- a/trytond/CHANGELOG +++ b/trytond/CHANGELOG @@ -1,3 +1,4 @@ +* Fill wizard state view instance with default value * Replace passlib by pwdlib * Add size limit for RPC arguments * Store the ignore search limit option of export diff --git a/trytond/trytond/tests/test_wizard.py b/trytond/trytond/tests/test_wizard.py index 1ed66a0be4..16a8949c8c 100644 --- a/trytond/trytond/tests/test_wizard.py +++ b/trytond/trytond/tests/test_wizard.py @@ -47,11 +47,9 @@ class WizardTestCase(TestCase): session, = Session.create([{}]) wizard = Wizard(session.id) self.assertEqual(wizard.start.id, None) - self.assertRaises(AttributeError, getattr, wizard.start, 'name') - self.assertEqual(hasattr(wizard.start, 'name'), False) + self.assertEqual(wizard.start.name, None) wizard.start.name = 'Test' - self.assertRaises(AttributeError, getattr, wizard.start, 'user') - self.assertEqual(hasattr(wizard.start, 'user'), False) + self.assertEqual(wizard.start.user.id, Transaction().user) wizard.start.user = transaction.user group_a, = Group.create([{ 'name': 'Group A', diff --git a/trytond/trytond/wizard/wizard.py b/trytond/trytond/wizard/wizard.py index 07ff1b8e46..958fe43f73 100644 --- a/trytond/trytond/wizard/wizard.py +++ b/trytond/trytond/wizard/wizard.py @@ -7,6 +7,7 @@ __all__ = ['Wizard', import copy import json +from collections import defaultdict from trytond.i18n import gettext from trytond.model import ModelSQL @@ -393,12 +394,18 @@ class Wizard(URLMixin, PoolBase): Session = pool.get('ir.session.wizard') self._session_id = session_id session = Session(session_id) - data = json.loads(session.data, object_hook=JSONDecoder()) + data = defaultdict(dict) + data.update(json.loads(session.data, object_hook=JSONDecoder())) for state_name, state in self.states.items(): if isinstance(state, StateView): - Target = pool.get(state.model_name) - data.setdefault(state_name, {}) - setattr(self, state_name, Target(**data[state_name])) + View = pool.get(state.model_name) + view_data = data[state_name] + default_values = View.default_get( + View._fields.keys(), with_rec_name=False) + for field_name in View._fields: + view_data.setdefault( + field_name, default_values.get(field_name)) + setattr(self, state_name, View(**view_data)) def _save(self): "Save the session in database"