继承模型 many2one 选择了错误的字段值
Inherited model many2one picking a wrong field value
我正在尝试在我的继承模型 (plot.allocate) 中引用 formdownload 模型的 form_serial_no 字段。而不是显示 form_serial_no 的计算值的下拉列表,它是用序列填充的 company_short_code,例如 CCK0000006,它显示 "CCK",这是不包括序列的 company_short_code 的值。实际上,它引用的是 companyname 模型的 company_short_code 而不是 formdownload 模型的 form_serial_no 的计算值。在数据库中,form_serial_no 字段显示正确的记录,类似于这些……ABC0000008、CDG0000003 等等。这是我的问题,plot.allocate 模型的 form_serial_no_id Many2one 字段没有选择 formdownload 的 form_serial_no Char 字段的值,而是选择 company_short_code 公司名称模型的字符字段?
其次,当在 plot.allocate 模型的 form_serial_no_id Many2one 字段中选取值时,如何将公司名称模型记录的状态字段默认值更改为 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)
在视图中,many2one 始终显示模型 class 中由 _rec_name
指定的字段的值:
默认_rec_name = 'name'
所以实际上你的模型是这样的:
class FormDownload(models.Model):
_name = 'formdownload'
_rec_name = 'name'
所以他将检索字段 name
的值 name 也是一个 many2one 所以检索的值是模型 companyname
的 _rec_name
是 company_short_code
:
所以我想更改 many2one 的值,您必须选择:
如果一个字段足够,则指定 _rec_name = 'form_serial_no'
如果你想像名字和&姓氏那样组合值,那么覆盖name_get方法
@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
编辑
在创建方法中很简单,只需删除创建方法中的所有代码并放入这两行
rec_id = super(PlotAllocation, self).create(vals)
# create return a record you can acces it's value
rec_id.form_serial_no_id.name.status = True
return rec_id # you need to return the record
我正在尝试在我的继承模型 (plot.allocate) 中引用 formdownload 模型的 form_serial_no 字段。而不是显示 form_serial_no 的计算值的下拉列表,它是用序列填充的 company_short_code,例如 CCK0000006,它显示 "CCK",这是不包括序列的 company_short_code 的值。实际上,它引用的是 companyname 模型的 company_short_code 而不是 formdownload 模型的 form_serial_no 的计算值。在数据库中,form_serial_no 字段显示正确的记录,类似于这些……ABC0000008、CDG0000003 等等。这是我的问题,plot.allocate 模型的 form_serial_no_id Many2one 字段没有选择 formdownload 的 form_serial_no Char 字段的值,而是选择 company_short_code 公司名称模型的字符字段?
其次,当在 plot.allocate 模型的 form_serial_no_id Many2one 字段中选取值时,如何将公司名称模型记录的状态字段默认值更改为 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)
在视图中,many2one 始终显示模型 class 中由 _rec_name
指定的字段的值:
默认_rec_name = 'name'
所以实际上你的模型是这样的:
class FormDownload(models.Model):
_name = 'formdownload'
_rec_name = 'name'
所以他将检索字段 name
的值 name 也是一个 many2one 所以检索的值是模型 companyname
的 _rec_name
是 company_short_code
:
所以我想更改 many2one 的值,您必须选择:
如果一个字段足够,则指定 _rec_name = 'form_serial_no'
如果你想像名字和&姓氏那样组合值,那么覆盖name_get方法
@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
编辑
在创建方法中很简单,只需删除创建方法中的所有代码并放入这两行
rec_id = super(PlotAllocation, self).create(vals)
# create return a record you can acces it's value
rec_id.form_serial_no_id.name.status = True
return rec_id # you need to return the record