继承模型many2one选择错误的字段值

时间:2017-04-25 12:52:27

标签: openerp odoo-8 odoo-9 odoo-10

我试图在我的继承模型(plot.allocate)中引用formdownload模型的form_serial_no字段。而不是显示form_serial_no的计算值的下拉列表,它是用序列(例如CCK0000006)填充的company_short_code,它显示“CCK”,它是除序列之外的company_short_code的值。实际上,它引用的是companyname模型的company_short_code,而不是formdownload模型的form_serial_no的计算值。并且在数据库中,form_serial_no字段显示的是正确的记录,如这些...... ABC0000008,CDG0000003等。这是我的问题,有什么理由为什么form.serial_no_id plot2.allocate模型的Many2one字段没有选择formdown的form_serial_no Char字段的值,而是选择companyname模型的company_short_code字段?

其次,在form.serial_no_id plot2.allocate模型的Many2one字段中选择值时,如何将companyname model record的status字段默认值更改为true?

请帮我看看这些。

以下是我的代码段

    # -*- coding: utf-8 -*-

from openerp import models, fields, api

class CompanyName(models.Model):
    _name = 'companyname'
    _rec_name = 'company_short_code'

    company_name = fields.Char(string="Company Name", required=True)
    company_short_code = fields.Char(string="Company short code", required=True)

class FormDownload(models.Model):
    _name = 'formdownload'
    _rec_name = 'form_serial_no'

    name = fields.Many2one('companyname', string="Company Name", ondelete='cascade',
                                      required=True)
    form_serial_no = fields.Char(string="Form Serial No", readonly=True)
    status = fields.Boolean(string="Status", default=False)

    @api.model
    def create(self, vals):

        serial_no = self.env['ir.sequence'].get('formdownload.form_serial_no')
        code = self.env['companyname'].browse(vals['name']).company_short_code

        # capitalize company short code values
        code = code.upper()

        # merge code and serial number
        vals['form_serial_no'] = code + serial_no
        return super(FormDownload, self).create(vals)

class PlotAllocation(models.Model):
    _inherit = 'plot.allocate'

    form_serial_no_id = fields.Many2one('formdownload',
                                        domain=[('status', '=', False)],
                                         ondelete='cascade', string="Form Serial No")

    @api.model
    def create(self, vals):
        record = self.env['formdownload'].search([('name', 'like', vals.get('name', False))]).form_serial_no
        status = self.env['companyname'].search([('name', 'like', vals.get('name', False))]).status
        if vals.get('form_serial_no_id') == record.id:
            self.env['companyname'].write({status : True})

            return super(PlotAllocation, self).create(vals)

1 个答案:

答案 0 :(得分:0)

在视图中,many2one始终显示_rec_name在Model类中指定的字段的值:

默认情况下_rec_name = 'name'

所以实际上你的模型是这样的:

 class FormDownload(models.Model):
        _name = 'formdownload'
        _rec_name = 'name'

所以他会检索字段name名称的值也是一个很多2,所以检索到的值是模型_rec_name companyname的{​​{1}}:

所以我想改变你必须选择的many2one的值:

如果一个字段足以指定company_short_code

如果你想像第一个&&组合价值姓氏然后覆盖name_get方法

_rec_name = 'form_serial_no'

<强> EDITS

在create方法中很容易删除create方法中的所有代码并将这两行放在

@api.multi
def name_get(self):
    """
        change the displayed value on m2o
    """
    result = []
    for record in self:
        result.append((record.id, _(" %s  %s") % (record.first_name, record.last_name)))
    return result