将模型的名称索引传递到另一个模型的字段--Odoo v8

时间:2017-10-13 02:57:00

标签: python openerp odoo-8

我有这个方法:

@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")

该方法有效,但在origin的{​​{1}}字段中,它只创建一个1,它应该是来自bsi.print.order的{​​{1}},而不是数字,这有点奇怪,事实是,无论我创建多少个印刷订单,它总是会在那里放一个数字。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这是因为您要为Char字段origin分配bsi.production.order的第一条记录的ID(即1,您正在浏览它)。 如果您想要name bsi.production.order,请尝试以下操作:

@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()或其他内容。