python-2.7 - Odoo on write() 方法检查多对多关系

标签 python-2.7 many-to-many odoo odoo-9 m2m

我有两门课:

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)

表单 View xml 的 my.request 类部分:

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

当我从 my.request 表单 View 中选择值并单击“保存”按钮时,我调用 write() 方法,然后将 m2m 值(如果有选定的值)插入到关系表 (purchase_supply_rel) 中。

当我单击“保存”按钮时,我想添加检查purchase.request id是否位于purchase_requests_id字段中的purchase_supply_rel表中。我的职能。 # 我的新代码注释后的更改:

@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')

我还能如何检查这个?我做错了什么?

更新:

我需要像这样获取测试值:purchase_request(245,352) 245,352 - buy.request 类的 ID

最佳答案

您无法在域中添加动态值来代替字段名称。 域是元组的列表。域包含元组中的三个部分。

域名:

[('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

关于python-2.7 - Odoo on write() 方法检查多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44568731/

相关文章:

ios - 为什么 NSFetchedResultsController 没有检索到我的多对多关系?

odoo - 如何根据发票Odoo v8的状态字段隐藏编辑按钮表单?

python - 在 Debian 9 "Strech"中安装 w3af?

python - 从字符串名称创建变量

SQL如何确定关系是否为多对多

postgresql - 将数据从 SugarCRM 迁移到 Odoo?

python - odoo Many2one 和 Many2many

python - 通过匹配 python 中的内部 dicts 属性来展平两个字典列表?

Python Selenium send_keys 函数发送部分文本

symfony - 管理中的可排序奏鸣曲类型模型