2017-06-15 95 views
2

我有2類:Odoo上write()方法檢查many2many關係

class my_request(models.Model): 

    _name = 'my.request' 
    _inherit = ['mail.thread', 'ir.needaction_mixin'] 

    supply_ids = fields.Many2many(comodel_name='supply.conditions', 
               relation='purchase_supply_rel', 
               column1='purchase_requests_id', column2='supply_conditions_id', 
               string='Supply Conditions') 

class SupplyConditions(models.Model): 
    _name = 'supply.conditions' 

vendor = fields.Char(string='Vendor', required=True) 
quantity = fields.Char(string='Quantity', required=True) 
request_id = fields.Many2one('my.request', 'My request') 
name = fields.Many2one('my.request.line', string='Product', required=True) 
currency_id = fields.Many2one('res.currency', string='Currency', default=_get_default_currency) 
supply_rel_id = fields.Boolean(string='Relation field', default=False) 

形式視圖XML的my.request類部分:

<page string="Order"> 
     <field name="supply_ids" domain="[('purchase_id', '=', id)]"/> 
</page> 

當我從my.request表單視圖中選擇值並單擊保存按鈕我調用write()方法,並在此時將m2m值(如果存在選定值)插入到re空表(purchase_supply_rel)。

我想添加檢查purchase.request id是否位於purchase_requests_id字段的purchase_supply_rel表中,當我點擊保存按鈕時。我的功能。 #我的新代碼後COMENT變化:

@api.multi 
def write(self, vals): 
    res = super(PurchaseRequest, self).write(vals) 
    for request in self: 
     if request.state != 'draft': 
     if vals.get('assigned_to'): 
      self.message_subscribe_users(user_ids=[request.assigned_to.id]) 
    # my new code 
    test = self.env['purchase.request'].search([(self.id,'in','supply_ids')]) 
    _logger.warning("test " + str(test)); 
    return res 

但我得到了一個錯誤:

File "/opt/odoo/openerp/osv/expression.py", line 586, in check_leaf 
    raise ValueError("Invalid leaf %s" % str(self.leaf)) 
ValueError: Invalid leaf (348, 'in', 'supply_ids') 

我還能如何檢查呢?我做錯了什麼?

UPDATE:

我需要測試值水木清華這樣的:purchase_request(245352) 245352 - purchase.request級的IDS

回答

2

您不能在域代替添加動態價值字段名稱。 域是元組列表。域包含元組中的三部分。

域:

[('field_name','operator','values')] 

所以動態值是不允許在域字段名。

@api.multi 
def write(self, vals): 
    res = super(PurchaseRequest, self).write(vals) 
    for request in self: 
     if request.state != 'draft': 
     if vals.get('assigned_to'): 
      self.message_subscribe_users(user_ids=[request.assigned_to.id]) 
    # my new code 
    test = self.env['purchase.request'].search([('supply_ids','in',self.ids)]) 
    _logger.warning("test " + str(test)); 
    return res 
+0

謝謝。更改後,我沒有收到錯誤信息,但仍有錯誤。問題是,當我調用write()方法時,雖然在關係表(purchase_supply_rel)上有數據,但測試值得到了emplty:purchase.request()。所以我不知道如何檢查關係表上是否有任何價值...... – fueggit

+0

請分享所有型號的模型結構。 –

+0

你是什麼意思?你想看看init文件和清單嗎?現在我更新了我的問題中supply.conditions中使用的字段。 – fueggit