В OpenERP объект OSV может возвращать то, что может открыть новый вид или активировать действие. Например, sale.order
имеет manual_invoice
метод, который возвращает следующее:Оператор возврата OSV
return {
'name': _('Customer Invoices'),
'view_type': 'form',
'view_mode': 'form',
'view_id': [res_id],
'res_model': 'account.invoice',
'context': "{'type':'out_invoice'}",
'type': 'ir.actions.act_window',
'nodestroy': True,
'target': 'current',
'res_id': inv_ids and inv_ids[0] or False,
}
и открывается вид формы счета-фактуры в том же окне.
Я видел, что 'view_id': [res_id],
был изменен на 'views': [(id2, 'form')],
и другие детали также были изменены, и он все еще работает.
Так что я не понимаю, как работает этот механизм. Что определяет, какие значения в return dict должны быть включены? Как я могу узнать, какие из них являются обязательными, а какие нет?
Большое спасибо!
Единственным исключением в этом случае является атрибут views, который представляет собой список с кортежами, тогда как в XML-файле вам нужно будет создать отдельные записи ir.actions.act_window.view, возможно, стоит его изменить? – Red15
@ Red15 Фактически значение 'views', которое может быть возвращено в таком определении встроенного действия, не отличается от фактического поля функции' views', которое существует в модели ir.actions.act_window. Эта функция действительно полагается на дочерние записи 'ir.actions.act_window.view', которые явно указывают на используемые представления, но не только. И его значение - это один и тот же список кортежей. Одна разница, о которой я могу думать, - это наличие дополнительного ключа «res_id», который позволяет указать идентификатор определенной записи для открытия, обычно, когда единственным разрешенным видом является вид формы. Это полезно для (re) открытых мастеров. – odony