[IMP] base: allow to use default_ context key for properties

Purpose
=======
Allow to use `default_properties.xxxxx` as a context key, to set the
default value on a property. We need that because when we group by
a property in a Kanban view, we can create new record in a given
column, and this process will set this context key.

Task-3032464

Part-of: odoo/odoo#103510
This commit is contained in:
std-odoo
2023-09-08 09:46:56 +00:00
parent 17039d8f4f
commit 6412575f4b
2 changed files with 41 additions and 1 deletions
@@ -604,6 +604,41 @@ class PropertiesCase(TestPropertiesMixin):
})
self.assertEqual(self._get_sql_properties(record), {'my_char': 'my char', 'test': self.partner_2.id})
# use the context to set the default value, the default key in the definition is ignored
# (e.g. when you create a new record in a Kanban view grouped by a property)
del property_definition[0]['value']
self.discussion_1.attributes_definition = property_definition
partner = self.env['test_new_api.partner'].create({'name': 'Test Default'})
message = self.env['test_new_api.message'] \
.with_context({'default_attributes.my_many2one': partner.id}) \
.create({
'name': 'Test Message',
'author': self.user.id,
'discussion': self.discussion_1.id,
'attributes': property_definition,
})
sql_values = self._get_sql_properties(message)
self.assertEqual(sql_values, {'my_many2one': partner.id})
properties = message.read(['attributes'])[0]['attributes']
self.assertEqual(properties[0]['value'], (partner.id, partner.display_name))
# "None" is a valid default value
del property_definition[0]['value']
message = self.env['test_new_api.message'] \
.with_context({'default_attributes.my_many2one': None}) \
.create({
'name': 'Test Message',
'author': self.user.id,
'discussion': self.discussion_1.id,
'attributes': property_definition,
})
sql_values = self._get_sql_properties(message)
self.assertEqual(sql_values, {'my_many2one': False})
properties = message.read(['attributes'])[0]['attributes']
self.assertEqual(properties[0]['value'], False)
def test_properties_field_read(self):
"""Test the behavior of the read method.
+6 -1
View File
@@ -3545,7 +3545,12 @@ class Properties(Field):
for properties_value in properties_list_values:
if properties_value.get('value') is None:
default = properties_value.get('default') or False
property_name = properties_value.get('name')
context_key = f"default_{self.name}.{property_name}"
if property_name and context_key in env.context:
default = env.context[context_key]
else:
default = properties_value.get('default') or False
properties_value['value'] = default
return properties_list_values