2017-04-25 62 views
0

我想引用我繼承的模型(plot.allocate)formdownload模型form_serial_no領域。不用下拉菜單來顯示form_serial_no的計算值,該值是用序列填充的company_short_code,例如CCK0000006,它顯示「CCK」,它是不包括序列的company_short_code的值。實際上,它引用的是公司名稱模型的company_short_code,而不是formdownload模型的form_serial_no的計算值。而在數據庫中,form_serial_no字段顯示的是正確的記錄,類似於...... ABC0000008,CDG0000003等等。這是我的問題,是否有任何理由爲什麼form_serial_no_id plot.allocate模型的Many2one字段沒有選擇form_serial_no formdownload的Char字段的值,而是選擇companyname模型的company_short_code Char字段?繼承模型many2one選擇了錯誤的字段值

其次,如何更改公司名稱模型記錄的真狀態字段默認值,當值plot.allocate模型form_serial_no_id Many2one場挑?

請幫我看看這些。

下面是我的代碼段

# -*- 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) 
+0

:名稱 ?因爲你在問vals是否包含'name' – Cherif

+0

不,我沒有keyerror。 – John

回答

0

在視圖中many2one總是示出在模型類中指定的字段的值由_rec_name

默認_rec_name = 'name'

所以在現實中你的模型是這樣的:

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

所以他會retreive字段的值name名稱也是many2one因此檢索到的值與模型companyname_rec_namecompany_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 

編輯

在創建方法很容易只是刪除所有的代碼創建方法,當你創建你不必像KeyError異常任何錯誤記錄把這兩個線路

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 
+0

讓我知道如果你不明白我在說什麼 – Cherif

+0

感謝您的回覆。這真的很有用.........我能用這個回答解決第一個問題........現在,第二個問題? – John

+0

因此,當您在m2o字段中選擇一個值時,默認狀態爲false,您希望與此記錄相關的公司名具有status = true。 如果至少有一條記錄從該公司status = true中選擇,那麼您的意思是true?並至少投票解決你的第一個問題和信息,我花了超過5分鐘。 – Cherif