У меня есть запись, которая создана в блоке! Python, вызывая функцию, которая создает заказы на продажу от Crm Lead. Теперь я хочу протестировать рабочий процесс на новом созданном Заказе на продажу. Есть ли способ передать идентификатор новой sale_order обратно в YAML, так что я смогу использовать инструкцию workflow?Пропустить идентификатор записи от! Python до YAML в тестах Odoo/OpenERP
ответ
Вы можете сохранить идентификатор до ir.model.data
внутри блока !python
, и он будет виден другим блокам.
Это пример создания группы из аа питона блока и добавление пользователя к нему из блока записи:
-
Create an external id 'test_group_id'
-
!python {model: res.groups}: |
from openerp import SUPERUSER_ID
obj_id = self.create(cr, uid, {'name':'Test Group'}, context=context)
imd_values = {'module':'base', 'model': model._name, 'name': 'test_group_id', 'res_id': obj_id}
id = self.pool['ir.model.data'].create(cr, SUPERUSER_ID, imd_values, context=context)
assert obj_id == ref('test_group_id'), 'saved reference should be equal'
assert id, 'external id should be saved'
-
The identifier 'test_group_id' should be visible from other "python" tags
-
!python {model: res.groups}: |
assert ref('test_group_id'), 'External Id should exists'
-
Create user 'Test User' to include it in 'test_group_id'
-
!record {model: res.users, id: res_users_test, view: False}:
company_id: base.main_company
name: Test User
login: testuser
password: testuser
-
Include the user in the referenced group. Then 'test_group_id' is visible from "record" tags.
-
!record {model: res.users, id: res_users_test}:
groups_id:
- base.test_group_id
Я должен добавить, что это решение работает только тогда, когда для этого теста уникален «внешний идентификатор» ('xml_id'). Реализация 'process_record' в' yaml_import.py' использует 'get_id' для разрешения ссылок на внешние идентификаторы (с псевдонимом' ref'). Метод get_id выглядит сначала в кэше с именем 'id_map', который не может быть недоступен из кода тега'! Python'. Переменные среды, к которым можно получить доступ из тега a! Python, определены в словаре 'code_context' метода' process_python'. – yucer
Я предполагаю, что вы не хотите изменять код yaml_import.py, иначе вы можете включить его в 'code_context' из' process_python': '{'yaml': self}' и расширять мой код с помощью 'yaml.id_map ['test_group_id'] = id' – yucer
Если вы размещаете свой код, который я могу адаптировать мой образец продажи Заказы, УРК Свинец и тег '! workflow'. – yucer