2

I have 2 classes:

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

and

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)

my.request class part of form view xml:

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

When I select values from my.request form view and click on Save button I call write() method and at that time insert m2m values (if there is selected values) into relational table (purchase_supply_rel).

I want to add check if purchase.request id is in purchase_supply_rel table in purchase_requests_id field when I click on Save button. My function. Changes after # my new code 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

But I got an error:

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

How else I can check this? And what I am doing wrong?

UPDATE:

I need to get test value smth like this: purchase_request(245,352) 245,352 - ids of purchase.request class

fueggit
  • 859
  • 1
  • 22
  • 44

1 Answers1

2

You can not add dynamic value in domain in place of field name. Domain is a list of tuples. Domain contains three portions in tuple.

Domain:

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

So dynamic value is not allowed in field name in domain.

@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