I'm trying to update One2many field inside onchange method.
As documentation says I'm using update method, and not standard CRUD methods like create.
I have this piece of code:
class HrExpenseSheet(models.Model):
    _inherit = "hr.expense.sheet"
    @api.onchange('employee_id')
    def _update_expense_ids(self):
        
        # define variables ...
        values = {
            'product_id': product_id,
            'name': name,
            'product_uom_id': product_uom_id, 
            'unit_amount': unit_amount, 
            'quantity': quantity, 
            'total_amount': total_amount
        }
            
        self.update({'expense_line_ids':[(0, 0, values)]})
It almost works. I get my record added to the table but after that whole table just breaks... When this code executes couple things happen:
    I'm not able to save the document because supposedly required unit_amount is not filled in - it clearly should be
    When I'm trying to edit that particular line I'm not able to because it takes me to a completely new record without my data filled in (but data is present on the table view)
    I'm not able to add new row because when I click the button I get error psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: "virtual_2509" LINE 1: ...mpany_id" = 1))  AND  (("hr_expense"."id" not in ('virtual_2...
What the hell is happening. I've had the same code running on version 8.0 without problem but this does not work on 13.0.
Odoo is the world's easiest all-in-one management software.
 It includes hundreds of business apps:
- CRM
- e-Commerce
- Contabilità
- Magazzino
- PoS
- Project
- MRP
La domanda è stata contrassegnata
            
                1
                
                    Rispondi
                
            
        
        
            
                5335
                
                    Visualizzazioni
                
            
        
    Hi,
Try update your code like below.
    @api.onchange('employee_id')
    def _update_expense_ids(self):
        # define variables ...
        values = [{
            'product_id': product_id,
            'name': name,
            'product_uom_id': product_uom_id,
            'unit_amount': unit_amount,
            'quantity': quantity,
            'total_amount': total_amount
        }]
        self.update({'expense_line_ids': [(6, 0, values)]})
Hope it helps
Does not work. I get an error
File "/usr/lib/python3/dist-packages/odoo/api.py", line 745, in get
value = self._data[field][record._ids[0]]
TypeError: unhashable type: 'dict'
Ti stai godendo la conversazione? Non leggere soltanto, partecipa anche tu!
Crea un account oggi per scoprire funzionalità esclusive ed entrare a far parte della nostra fantastica community!
Registrati| Post correlati | Risposte | Visualizzazioni | Attività | |
|---|---|---|---|---|
|  | 0 lug 22  | 4221 | ||
|  | 1 gen 21  | 4021 | ||
|  | 0 dic 21  | 3708 | ||
|  | 2 dic 21  | 6833 | ||
| 
            
                On change is not triggered
            
            
                    Risolto
            
         |  | 1 gen 21  | 6004 | 
