class AccountRoot(models.Model):
_name = 'stock.all.package'
_description = '显示所有箱子系统package和Lot package'
_auto = False
name = fields.Char('箱号')
lot = fields.Char('标单号')
create_date = fields.Datetime('装箱时间')
quant_ids = fields.One2many('stock.quant','package_id', '箱内产品', readonly=True,
domain=['|', ('quantity', '!=', 0), ('reserved_quantity', '!=', 0)])
#保留ID号的原因是因为需要one2many字段的对应
def init(self):
tools.drop_view_if_exists(self.env.cr, self._table)
self.env.cr.execute('''
CREATE OR REPLACE VIEW %s AS (
SELECT id AS id,
print_box_name as name,
name as lot,
create_date
FROM stock_quant_package WHERE active = TRUE
UNION ALL
SELECT ROW_NUMBER () OVER() -100000 AS id,
print_box_name AS name,
package_name as lot,
create_date
FROM packing_info_package WHERE active = TRUE
)''' % (self._table,)
)
使用sql语句创建posgresql view,然后map模型到这个视图。这个视图就可以当做正常的视图,在odoo使用了。需要注意的是ID字段要唯一。