2017-10-10 104 views
2

考慮這兩款車型:從另一個模型創建模型 - 用Many2one領域 - Odoo V8

class bsi_production_order(models.Model): 
    _name = 'bsi.production.order' 
    _inherit = ['product.product'] 

    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") 
    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.production.order新記錄bsi.print.order,有專門兩個用於IT領域,stateproduction_order,後者是bsi.production.ordername字段。

你可以看到bsi.print.order這個領域是一個Many2one場,而在bsi.production.orderChar,這是我到目前爲止已經試過:

@api.multi 
def create_print(self): 
    self.env['bsi.print.order'].create({ 
     'production_orders': 'name', 
     'state': 'draft', 
    }) 

如果我離開了state到字典,它正確造成的,但如果我嘗試這樣,它拋出我:

Traceback (most recent call last): 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 546, in _handle_exception 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 583, in dispatch 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 319, in _call_function 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\service\model.py", line 118, in wrapper 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 316, in checked_call 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 812, in __call__ 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 412, in response_wrap 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\web\controllers\main.py", line 948, in call_button 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\web\controllers\main.py", line 936, in _call_kw 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 268, in wrapper 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 399, in old_api 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\mrp_worksheet_contract\models\models.py", line 262, in create_print 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 266, in wrapper 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\mrp_worksheet_contract\models\models.py", line 466, in create 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 266, in wrapper 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\mrp_worksheet_contract\models\models.py", line 20, in create 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 266, in wrapper 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 508, in new_api 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\mail\mail_thread.py", line 381, in create 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 268, in wrapper 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 372, in old_api 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\models.py", line 4101, in create 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 266, in wrapper 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 508, in new_api 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\models.py", line 4245, in _create 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\sql_db.py", line 171, in wrapper 
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\sql_db.py", line 247, in execute 
DataError: la sintaxis de entrada no es válida para integer: «name» 
LINE 1: ...ES(nextval('bsi_print_order_id_seq'), 'PO-00009', 'name', fa... 

所以,因爲這是一個bsi.print.orderMany2one,我在做什麼錯?

編輯

好像而不是傳遞的bsi.production.order name場分爲production_orders Many2one領域,它實際上是試圖建立與它自己的name領域的bsi.print.order。

回答

1

在Odoo中,Many2one字段存儲目標表的整數值/ ID。

就你而言,你試圖通過char值,這是導致錯誤。

嘗試用下面的代碼:

@api.multi 
def create_print(self): 
    # You need to pass ID as per your requirement 
    rec_production_order = self.env['bsi.production.order'].browse(1) 
    self.env['bsi.print.order'].create({ 
     'production_orders': rec_production_order.id, 
     'name': rec_production_order.name 
     'state': 'draft', 
    }) 
+0

你好,非常感謝你,但現在我的模型搞砸,完整性錯誤甚至不能創建生產訂單,我認爲這與'rec_production_order =自做.env ['bsi.production.order] .browse(1)'line,not sure,gonna modify it and try as soon after I wake up,Thank You again – NeoVe

+0

這解決了我的問題,非常感謝,將爲任何其他問題打開一個新的:) – NeoVe