[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:
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user