Help

0

one2many api.onchange set 1 attribute to true und rest to false

Avatar
ai

class A(models.Model):

b_ids = fields.One2many('a', a_id);

@api.onchange('b_ids')

def set_all_other_value_to_false(self):

    for b_id in self:

        b_id.boolean_flag = False

        #how can I set all other value to false, except the last one which I selected to True?

class B(models.Model):

boolean_flag = fields.Boolean(default=False)

a_id = fields.Many2One('a')


I don't know how I can set all boolean_flag to False except the last one which I selected. How can I solve that problem?

Avatar
Discard
2 Answers
0
Avatar
DHA Medic
Best Answer

"self.b_ids.ids" to get list
use sql to select this list
compare "boolean_flag" in db and in self.b_ids.boolean_flag

Try:

update value via self.env

https://www.odoo.com/forum/help-1/question/odoo-8-how-to-update-value-of-one2many-field-with-at-second-level-by-using-create-and-write-method-using-api-104615

Or

Override write method

1 Comment
Avatar
Discard
Avatar
ai
-

it does not work with sql, because it can be that it is not saved in the database (create modus).

0
Avatar
Zbik
Best Answer

In onchange Odoo creates a new object and replaces self with it. The origin object  can be found under self._origin
Check if this is useful?


5 Comments
Avatar
Discard
Avatar
ai
-

how does this solve this problem? can you give a example?

the view should be updated immediately.

Avatar
Zbik
-

Does the b_ids.ids change? Only change b_ids.boolean_flag? Do you want to check the last click?

Avatar
ai
-

yes, I want to know to last click. and I want to set the last boolean_flag to True and the rest records of False.

Avatar
Zbik
-

This is impossible in the general case, when all records b_ids are not stored in database. Only solutions is to modify javascript.

Avatar
ai
-

Thanks. I hope there will be a solution.