将模型的名称索引传递到另一个模型的字段中 - Odoo v8
Pass name index of model, into a field of another model - Odoo v8
我有这个方法:
@api.multi
def create_print(self):
rec_production_order = self.env['bsi.production.order'].browse(1)
self.env['bsi.print.order'].create({
'origin': rec_production_order.id,
'state': 'draft',
})
应该从bsi.production.order
创建另一个模型,这是两个完整的模型:
class bsi_production_order(models.Model):
_name = 'bsi.production.order'
_inherit = ['product.product']
@api.model
def create(self, vals):
if vals.get('name', 'New') == 'New':
if vals.get('production_type') == 'budgeted':
vals['name'] = self.env['ir.sequence'].next_by_code('bsi.production.budgeted') or '/'
elif vals.get('production_type') == 'nonbudgeted':
vals['name'] = self.env['ir.sequence'].next_by_code('bsi.production.non_budgeted') or '/'
elif vals.get('production_type') == 'direct':
vals['name'] = self.env['ir.sequence'].next_by_code('bsi.production.direct') or '/'
return super(bsi_production_order, self).create(vals)
name = fields.Char('Reference', required=True, index=True, copy=False, readonly='True', default='New')
date = fields.Date(string="Production Date")
notes = fields.Text(string="Notes")
order_lines = fields.One2many('bsi.production.order.lines', 'production_order', states={'finished': [('readonly', True)], 'cancel': [('readonly', True)]}, string="Order lines", copy=True)
print_orders = fields.One2many('bsi.print.order', 'production_orders', string="Print Orders")
class bsi_print_order(models.Model):
_name = 'bsi.print.order'
_inherit = ['mail.thread','mrp.worksheet.contract']
name = fields.Char('Reference', required=True, index=True, copy=False, readonly='True', default='New')
date = fields.Date(string="Print Date")
production_orders = fields.Many2one('bsi.production.order', ondelete='cascade', string="Production Order")
origin = fields.Char(string="Origin")
due_date = fields.Date(string="Due Date")
state = fields.Selection([
('draft','Draft'),
('awaitingraw','Awaiting raw materials'),
('wip','Work in Progress'),
('delivered','Delivered'),
('cancel','Cancel'),
], string="State")
notes = fields.Text(string="Notes")
该方法有效,但在 bsi.print.order
的 origin
字段上它只是创建了一个 1,它应该是 bsi.production.order
的 name
,而不是数字, 另外,这有什么奇怪的是,无论我创建多少打印订单,它总是在那里放一个数字 1。
有什么想法吗?
那是因为您正在为 Char 字段 origin
分配 bsi.production.order
的第一条记录的 ID(即 1
,您正在明确地浏览它)。
如果你想把 bsi.production.order
的 name
放在那里,那么试试这个:
@api.multi
def create_print(self):
rec_production_order = self.env['bsi.production.order'].browse(1)
self.env['bsi.print.order'].create({
'origin': rec_production_order.name,
'state': 'draft',
})
您的代码中可能还有另一个错误。如果您使用上面的代码,您会很快发现,每次您创建新的 bsi.print.order
记录时,您都会将其名称分配给 bsi.production.order
的第一条记录.可能,这不是你想要的。尝试替换
rec_production_order = self.env['bsi.production.order'].browse(1)
与 search()
或其他。
我有这个方法:
@api.multi
def create_print(self):
rec_production_order = self.env['bsi.production.order'].browse(1)
self.env['bsi.print.order'].create({
'origin': rec_production_order.id,
'state': 'draft',
})
应该从bsi.production.order
创建另一个模型,这是两个完整的模型:
class bsi_production_order(models.Model):
_name = 'bsi.production.order'
_inherit = ['product.product']
@api.model
def create(self, vals):
if vals.get('name', 'New') == 'New':
if vals.get('production_type') == 'budgeted':
vals['name'] = self.env['ir.sequence'].next_by_code('bsi.production.budgeted') or '/'
elif vals.get('production_type') == 'nonbudgeted':
vals['name'] = self.env['ir.sequence'].next_by_code('bsi.production.non_budgeted') or '/'
elif vals.get('production_type') == 'direct':
vals['name'] = self.env['ir.sequence'].next_by_code('bsi.production.direct') or '/'
return super(bsi_production_order, self).create(vals)
name = fields.Char('Reference', required=True, index=True, copy=False, readonly='True', default='New')
date = fields.Date(string="Production Date")
notes = fields.Text(string="Notes")
order_lines = fields.One2many('bsi.production.order.lines', 'production_order', states={'finished': [('readonly', True)], 'cancel': [('readonly', True)]}, string="Order lines", copy=True)
print_orders = fields.One2many('bsi.print.order', 'production_orders', string="Print Orders")
class bsi_print_order(models.Model):
_name = 'bsi.print.order'
_inherit = ['mail.thread','mrp.worksheet.contract']
name = fields.Char('Reference', required=True, index=True, copy=False, readonly='True', default='New')
date = fields.Date(string="Print Date")
production_orders = fields.Many2one('bsi.production.order', ondelete='cascade', string="Production Order")
origin = fields.Char(string="Origin")
due_date = fields.Date(string="Due Date")
state = fields.Selection([
('draft','Draft'),
('awaitingraw','Awaiting raw materials'),
('wip','Work in Progress'),
('delivered','Delivered'),
('cancel','Cancel'),
], string="State")
notes = fields.Text(string="Notes")
该方法有效,但在 bsi.print.order
的 origin
字段上它只是创建了一个 1,它应该是 bsi.production.order
的 name
,而不是数字, 另外,这有什么奇怪的是,无论我创建多少打印订单,它总是在那里放一个数字 1。
有什么想法吗?
那是因为您正在为 Char 字段 origin
分配 bsi.production.order
的第一条记录的 ID(即 1
,您正在明确地浏览它)。
如果你想把 bsi.production.order
的 name
放在那里,那么试试这个:
@api.multi
def create_print(self):
rec_production_order = self.env['bsi.production.order'].browse(1)
self.env['bsi.print.order'].create({
'origin': rec_production_order.name,
'state': 'draft',
})
您的代码中可能还有另一个错误。如果您使用上面的代码,您会很快发现,每次您创建新的 bsi.print.order
记录时,您都会将其名称分配给 bsi.production.order
的第一条记录.可能,这不是你想要的。尝试替换
rec_production_order = self.env['bsi.production.order'].browse(1)
与 search()
或其他。