Hoppa till innehåll
Odoo Meny
  • Logga in
  • Prova gratis
  • Appar
    Ekonomi
    • Bokföring
    • Faktura
    • Utgifter
    • Kalkylark (Affärsanalyser)
    • Dokument
    • Underskrifter
    Försäljning
    • CRM
    • Försäljning
    • Kassasystem Butik
    • Kassasystem Restaurang
    • Prenumerationer
    • Uthyrning
    Hemsida
    • Hemsidesverktyg
    • E-handel
    • Blogg
    • Forum
    • Livechatt
    • Utbildning
    Försörjningskedja
    • Lager
    • Produktion
    • Produktens livscykel (PLM)
    • Inköp
    • Underhåll
    • Kvalitet
    HR
    • Anställda
    • Rekrytering
    • Ledighet
    • Utvärderingar
    • Rekommendationer
    • Fordon
    Marknadsföring
    • Sociala medier
    • E-postmarknadsföring
    • Sms-marknadsföring
    • Evenemang
    • Automatiserad marknadsföring
    • Enkäter
    Tjänster
    • Projekt
    • Tidrapporter
    • Fältservice
    • Kundtjänst
    • Planering
    • Tidsbokningar
    Produktivitet
    • Diskutera
    • AI
    • IoT
    • VoIP
    • Kunskap
    • WhatsApp
    Community-appar Odoo Studio Odoo Cloud
  • Branscher
    Butiker
    • Bokaffärer
    • Klädbutiker
    • Möbelaffärer
    • Mataffärer
    • Byggvaruhus
    • Leksaksaffärer
    Restaurang & Hotell
    • Barer och pubar
    • Restauranger
    • Snabbmatsrestauranger
    • Gästhus
    • Dryckesdistributörer
    • Hotell
    Fastigheter
    • Fastighetsbyråer
    • Arkitektfirmor
    • Byggföretag
    • Fastighetsägare
    • Trädgårdsmästare
    • Bostadsrättsföreningar
    Hitta en konsult
    • Redovisningsbyrå
    • Odoo Partner
    • Reklambyråer
    • Advokatbyråer
    • Rekrytering
    • Revisioner och certifieringar
    Produktion
    • Textilproduktion
    • Metallproduktion
    • Möbelproduktion
    • Livsmedelsproduktion
    • Bryggerier
    • Företagsgåvor
    Hälsa och fitness
    • Sportklubbar
    • Optiker
    • Träningscenter
    • Friskvård
    • Apotek
    • Frisörsalonger
    Hantverk
    • Hantverkare
    • IT-utrustning och kundtjänst
    • Solceller, solpaneler och solenergi
    • Skomakare
    • Städföretag
    • VVS-tjänster
    Övrigt
    • Ideella föreningar
    • Miljöförvaltningar
    • Uthyrning av reklamtavlor
    • Fotografer
    • Cykeluthyrning
    • Återförsäljare av mjukvara
    Upptäck alla Branscher
  • Community
    Utbildning
    • Instruktionsvideor
    • Dokumentation
    • Certifiering
    • Utbildningar
    • Blogg
    • Podcast
    Lär dig med oss
    • Workshops
    • Företagsspelet Scale Up!
    • Studiebesök hos Odoo
    Mjukvaran
    • Ladda ner
    • Jämför utgåvor
    • Versionsinformation
    Samverkan
    • GitHub
    • Forum
    • Evenemang
    • Översättningar
    • Bli en partner
    • Partnertjänster
    • Registrera din redovisningsbyrå
    Våra tjänster
    • Partners
    • Revisorer
    • Träffa en rådgivare
    • Implementering
    • Kundrecensioner
    • Kundtjänst
    • Uppgraderingar
    GitHub Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Boka en demo
  • Priser
  • Hjälp
Du måste vara registrerad för att kunna interagera med communityn.
Alla inlägg Personer Utmärkelser
Etiketter (Visa alla)
odoo accounting v14 pos v15
Om detta forum
Du måste vara registrerad för att kunna interagera med communityn.
Alla inlägg Personer Utmärkelser
Etiketter (Visa alla)
odoo accounting v14 pos v15
Om detta forum
Hjälp

@api.onchange doesn't save changes

Prenumerera

Få ett meddelande när det finns aktivitet på detta inlägg

Denna fråga har flaggats
sale.orderapi.onchange
5 Svar
31974 Vyer
Avatar
Ernesto Cordoba

Hi !

I wrote an @api.onchange method (ation_afaire) that detects a change in a Datetime field and calls another method (action_confirm) of the same class which among other things changes the order status to 'sale'. Everything works fine, when I make a change in the date_realization field the order state changes to sale. The problem is that when I click on save the system doesn't pick up the change and it all goes back to the previous state !

Does anybody knows why I am being unable to save this state change ?

Thank you !

Here's the code:

# -*- coding: utf-8 -*-

from odoo import models, fields, api

class gescom_states(models.Model):

    _inherit = 'sale.order'

    date_realization= fields.Datetime(string='Date de réalisation', store=True)

@api.multi
    def action_confirm(self):
        for order in self:         
            order.state = 'sale'          
        if self.env.context.get('send_email'):
                self.force_quotation_send()
            order.order_line._action_procurement_create()
        if self.env['ir.values'].get_default('sale.config.settings', 'auto_done_setting'):
            self.action_done()          
        return True

    @api.onchange('date_realization')
    def action_afaire(self):
        super (gescom_states,self).action_confirm()

1
Avatar
Avbryt
Protagonist

do you want to call the function action_confirm while onchange of the field 'date_realization'?

Răzvan Anastasescu

do you have all fields (that you want to be saved) on the view XML ? If not needed / visible, you have to put them invisible, and so they'll get saved

Avatar
Volodymyr
Bästa svar

That happens because 'state' field in sale.order model is readonly (readonly=True). 

In order to force it to be written you need to use write() function.

0
Avatar
Avbryt
cabrejua

That's correct

juan arpi

I tried that and it didn't work, what I did was in the view add an attribute force_save='1'

Avatar
Ray Carnes (ray)
Bästa svar

onchange methods work on virtual records - assignment on these records is not written to the database, just used to know which value to send back to the client.

From https://www.odoo.com/documentation/12.0/reference/orm.html

1
Avatar
Avbryt
Avatar
Mital Vaghani
Bästa svar

Hello,
As Ray Carnes mentioned that onchange methods work on virtual records.
So in onchange() method doesn't contain original record in which you changing. in this method "self" contains virtual copy of the record.

so, in your case it will not confirm that record with action_confirm().

0
Avatar
Avbryt
Avatar
Julien Teks
Bästa svar

In a @api.onchange function, you have to use write() function of the model


@api.onchange('field_name')
def _function_name(self, value)
    _my_object = self.env['model.name']
    _myobject.write({'field_name' : value})

If you want to edit a model refered by a Many2one, you you directly use this field as

@api.onchange('field_name')
def _function_name(self, value)
    self._my_many_2_one_field.write({'field_name' : value})
-1
Avatar
Avbryt
Njuter du av diskussionen? Läs inte bara, delta också!

Skapa ett konto idag för att ta del av exklusiva funktioner och engagera dig i vår fantastiska community!

Registrera dig
Relaterade inlägg Svar Vyer Verksamhet
Display field only for one company on list view Löst
sale.order
Avatar
Avatar
1
maj 25
3040
Sale order Balance
sale.order
Avatar
Avatar
Avatar
2
nov. 24
4030
Trying to make a allowed quantity done field.
api.onchange
Avatar
Avatar
1
apr. 24
4455
Mark a sales order as fully invoiced despite Order amount and invoiced amount do not match () Löst
sale.order
Avatar
Avatar
Avatar
Avatar
Avatar
4
feb. 24
15246
sale / delivery Löst
sale.order
Avatar
Avatar
1
jan. 24
3251
Community
  • Instruktionsvideor
  • Dokumentation
  • Forum
Öppen källkod
  • Ladda ner
  • GitHub
  • Runbot
  • Översättningar
Tjänster
  • Odoo.sh Hosting
  • Kundtjänst
  • Uppgradera
  • Anpassningsbara modifikationer
  • Utbildning
  • Revisorer
  • Partners
  • Bli en partner
Om oss
  • Vårt företag
  • Varumärkestillgångar
  • Kontakta oss
  • Jobb
  • Evenemang
  • Podcast
  • Blogg
  • Kunder
  • Juridiskt • Integritet
  • Säkerhet
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk Slovenščina Español (América Latina) Español Svenska ภาษาไทย Türkçe українська Tiếng Việt

Odoo är ett affärssystem med öppen källkod som täcker alla dina företagsbehov: CRM, e-handel, bokföring, lager, kassasystem, projektledning, och så vidare.

Odoos unika värdeförslag är att samtidigt vara väldigt enkel att använda men också helt integrerad.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now