Skip to Content
Odoo Menu
  • Zaloguj się
  • Wypróbuj za darmo
  • Aplikacje
    Finanse
    • Księgowość
    • Fakturowanie
    • Wydatki
    • Arkusz kalkulacyjny (BI)
    • Dokumenty
    • Podpisy
    Sprzedaż
    • CRM
    • Sprzedaż
    • PoS Sklep
    • PoS Restauracja
    • Subskrypcje
    • Wypożyczalnia
    Strony Internetowe
    • Kreator Stron Internetowych
    • eCommerce
    • Blog
    • Forum
    • Czat na Żywo
    • eLearning
    Łańcuch dostaw
    • Magazyn
    • Produkcja
    • PLM
    • Zakupy
    • Konserwacja
    • Jakość
    Zasoby Ludzkie
    • Pracownicy
    • Rekrutacja
    • Urlopy
    • Ocena pracy
    • Polecenia Pracownicze
    • Flota
    Marketing
    • Marketing Społecznościowy
    • E-mail Marketing
    • SMS Marketing
    • Wydarzenia
    • Automatyzacja Marketingu
    • Ankiety
    Usługi
    • Projekt
    • Ewidencja czasu pracy
    • Usługi Terenowe
    • Helpdesk
    • Planowanie
    • Spotkania
    Produktywność
    • Dyskusje
    • Zatwierdzenia
    • IoT
    • VoIP
    • Baza wiedzy
    • WhatsApp
    Aplikacje trzecich stron Studio Odoo Odoo Cloud Platform
  • Branże
    Sprzedaż detaliczna
    • Księgarnia
    • Sklep odzieżowy
    • Sklep meblowy
    • Sklep spożywczy
    • Sklep z narzędziami
    • Sklep z zabawkami
    Żywienie i hotelarstwo
    • Bar i Pub
    • Restauracja
    • Fast Food
    • Pensjonat
    • Dystrybutor napojów
    • Hotel
    Agencja nieruchomości
    • Agencja nieruchomości
    • Biuro architektoniczne
    • Budowa
    • Zarządzanie nieruchomościami
    • Ogrodnictwo
    • Stowarzyszenie właścicieli nieruchomości
    Doradztwo
    • Biuro księgowe
    • Partner Odoo
    • Agencja marketingowa
    • Kancelaria prawna
    • Agencja rekrutacyjna
    • Audyt i certyfikacja
    Produkcja
    • Tekstylia
    • Metal
    • Meble
    • Jedzenie
    • Browar
    • Prezenty firmowe
    Zdrowie & Fitness
    • Klub sportowy
    • Salon optyczny
    • Centrum fitness
    • Praktycy Wellness
    • Apteka
    • Salon fryzjerski
    Transakcje
    • Złota rączka
    • Wsparcie Sprzętu IT
    • Systemy energii słonecznej
    • Szewc
    • Firma sprzątająca
    • Usługi HVAC
    Inne
    • Organizacja non-profit
    • Agencja Środowiskowa
    • Wynajem billboardów
    • Fotografia
    • Leasing rowerów
    • Sprzedawca oprogramowania
    Przeglądaj wszystkie branże
  • Community
    Ucz się
    • Samouczki
    • Dokumentacja
    • Certyfikacje
    • Szkolenie
    • Blog
    • Podcast
    Pomóż w nauce innym
    • Program Edukacyjny
    • Scale Up! Gra biznesowa
    • Odwiedź Odoo
    Skorzystaj z oprogramowania
    • Pobierz
    • Porównaj edycje
    • Wydania
    Współpracuj
    • Github
    • Forum
    • Wydarzenia
    • Tłumaczenia
    • Zostań partnerem
    • Usługi dla partnerów
    • Zarejestruj swoją firmę rachunkową
    Skorzystaj z usług
    • Znajdź partnera
    • Znajdź księgowego
    • Spotkaj się z doradcą
    • Usługi wdrożenia
    • Opinie klientów
    • Wsparcie
    • Aktualizacje
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Zaplanuj demo
  • Cennik
  • Pomoc

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Księgowość
  • Zapasy
  • PoS
  • Projekt
  • MRP
All apps
Musisz się zarejestrować, aby móc wchodzić w interakcje z tą społecznością.
Wszystkie posty Osoby Odznaki
Tagi (Zobacz wszystko)
odoo accounting v14 pos v15
O tym forum
Musisz się zarejestrować, aby móc wchodzić w interakcje z tą społecznością.
Wszystkie posty Osoby Odznaki
Tagi (Zobacz wszystko)
odoo accounting v14 pos v15
O tym forum
Pomoc

[v12] api.one vs api.multi in calculated field

Zaprenumeruj

Otrzymaj powiadomienie o aktywności w tym poście

To pytanie dostało ostrzeżenie
decoratorsapi.oneapi.multiv12
1 Odpowiedz
9640 Widoki
Awatar
Yves Goldberg

It seem that api.one is deprecated in favor of api.multi + ensure.one

as an example:

  @api.one
  def _compute_total_cost(self):
        records = self.env["project.task"].search([("model", "in", self.ids)])       
        tcost = 0.0       
        for rec in records:           
            tcost += rec.cost       
        self.total_cost = tcost

 

  total_cost = fields.Monetary(comput="_compute_total_cost")


I tried to use api.multi but I am getting errors when there are more than one record in "records".

How would I switch to use api.multi in place of api.one in this case? Should I?

TIA

0
Awatar
Odrzuć
Awatar
Yenthe Van Ginneken (Mainframe Monkey)
Najlepsza odpowiedź

Hi Yves,

The @api.one function is indeed being phased out in Odoo V12/V13. The reason behind this is that it was confusing and causing issues for multiple developers. You should now go with @api.multi. With @api.multi you can have multiple records though (for example when opening multiple records somewhere) so you should deal with this. Usually what you do is loop over all the records in the onchange function (so all records within self) and then do your computations on every record in the record set. An example:


@api.multi
def _compute_total_cost(self):
    for record in self:
        # Find all tasks for this record (which can be one record in a recordset)
        task_records = self.env["project.task"].search([("model", "in", record.ids)])
        tcost = 0.0
        # Loop over your tasks results
        for task in task_records:
            tcost += task.cost
        # Write the result for this record on this record
        record.total_cost = tcost

If you're sure that your function is always one record (and want to enforce it) you can also use the self.ensure_one(). The Odoo framework will make sure there is always just one record then. In this case your example would be:

@api.multi
def _compute_total_cost(self):
    self.ensure_one()      
    for rec in records:  
        task_records = self.env["project.task"].search([("model", "in", self.ids)])        
        tcost = 0.0       
        for task in task_records:
            tcost += task.cost
        record.total_cost = tcost

You can even remove the loop in a self.ensure_one and just work with self, as it should always be one record. I've coded it the same for transparancy about the difference in both functions.


For more information about @api.one and @api.multi see https://www.odoo.com/nl_NL/forum/help-1/question/difference-between-api-one-and-api-multi-in-api-odoo-openerp-68209 and https://www.odoo.com/documentation/12.0/reference/orm.html#recordsets

Regards,
Yenthe

2
Awatar
Odrzuć
Podoba Ci się ta dyskusja? Dołącz do niej!

Stwórz konto dzisiaj, aby cieszyć się ekskluzywnymi funkcjami i wchodzić w interakcje z naszą wspaniałą społecznością!

Zarejestruj się
Powiązane posty Odpowiedzi Widoki Czynność
Is it necessary to use @api.one or @api.multi in all methods of a model?
odoo8.0 decorators api.one api.multi
Awatar
Awatar
1
cze 15
11109
Odoo 11 - Difference between the @api.multi and @api.model decorators Rozwiązane
decorators api.multi api.model odoo11
Awatar
Awatar
1
mar 22
31965
Can I rename "OdooBot" so that people don't get email from a "Bot". I have concerns this isn't professional / might make people think SCAM
v12
Awatar
Awatar
1
cze 25
26526
Error al timbrar pagos en v12
v12
Awatar
Awatar
Awatar
2
lip 22
4887
change a field value depending on a button output Rozwiązane
v12
Awatar
Awatar
1
wrz 21
4673
Społeczność
  • Samouczki
  • Dokumentacja
  • Forum
Open Source
  • Pobierz
  • Github
  • Runbot
  • Tłumaczenia
Usługi
  • Hosting Odoo.sh
  • Wsparcie
  • Aktualizacja
  • Indywidualne rozwiązania
  • Edukacja
  • Znajdź księgowego
  • Znajdź partnera
  • Zostań partnerem
O nas
  • Nasza firma
  • Zasoby marki
  • Skontaktuj się z nami
  • Oferty pracy
  • Wydarzenia
  • Podcast
  • Blog
  • Klienci
  • Informacje prawne • Prywatność
  • Bezpieczeństwo Odoo
الْعَرَبيّة 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 ภาษาไทย Türkçe українська Tiếng Việt

Odoo to pakiet aplikacji biznesowych typu open source, które zaspokoją wszystkie potrzeby Twojej firmy: CRM, eCommerce, księgowość, inwentaryzacja, punkt sprzedaży, zarządzanie projektami itp.

Unikalną wartością Odoo jest to, że jest jednocześnie bardzo łatwe w użyciu i w pełni zintegrowane.

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