2015-10-21 6 views

ответ

1

Вы можете получить модель, получающую данные из вида. На самом деле это широко используется в отчетах.

Но список полей, доступных в модели, должен быть определен в модели.

+0

Есть ли способ создать вышеупомянутую модель динамически? – Naitik

1

для создания динамических представлений в odoo, то лучше обратитесь этот link

Вот решение

  • указать _auto параметра = False на объект OpenERP, поэтому таблица не соответствующий Словарь _columns создается автоматически.

  • Добавьте метод init (self, cr), который создает представление PostgreSQL, соответствующее полям, объявленным в _columns.

код Python:

class xyz(osv.osv): 
_name = "xyz" 
_description = "xxx" 

_auto = False 

_columns = { 
      'unique_id': fields.char('Employee ID', size=12), 
      'employee_id': fields.many2one('table3', "Name"), 
     } 

def init(self, cr): 
    openerp.tools.drop_view_if_exists(cr, 'table_preview') 
    cr.execute(""" 
     create or replace view payslip_preview as (
        SELECT * FROM crosstab('SELECT ps.id as id, emp.unique_id as unique_id, emp.id as employee_i 
        FROM table1 psl 
        JOIN table2 ps ON (ps.id = psl.slip_id) 
        JOIN table3 emp ON (emp.id = ps.employee_id) 
        WHERE ps.state IN (''draft'') ORDER BY 1', 
        'SELECT id FROM table4 ORDER BY sequence') AS 
        (
         "id" int, 
         "unique_id" varchar(10), 
         "employee_id" int, 
        ) 
      ) 
     """)