2015-02-02 8 views

Odpowiedz

27

@ api.depends

ten dekorator jest wykorzystywane specjalnie dla "fields.function" w odoo. W przypadku funkcji "field.function" można obliczyć wartość i zapisać ją w polu, gdzie może się zdarzyć, że obliczenie będzie zależało od innych pól tej samej tabeli lub innej tabeli, w takim przypadku można użyć " @ api.depends ", aby zachować" zegarek "na polu pewnego stołu.

To wywoła wywołanie funkcji ozdobnej, jeśli dowolne z pól w dekoratorze to "zmienione przez ORM lub zmienione w postaci".

Powiedzmy znajduje się stół 'A' z pola "x, y & oo" oraz tabeli 'B' z pola "p", gdzie 'p' jest field.function zależności od pola 'x' z tabeli "A", więc jeśli jakakolwiek zmiana zostanie wprowadzona w polu "x", wywoła ona dekorowaną funkcję do obliczenia pola "p" w tabeli "B".

Upewnij się, że tabela "A" i "B" są w jakiś sposób powiązane.

@ api.onchange

ten dekorator spowoduje wywołanie funkcji zdobione, jeśli któryś z dziedzin określonych w dekoratora zostanie zmieniony w formularzu. Tutaj zakres jest ograniczony do tego samego ekranu/modelu.

Załóżmy, że w formularzu mamy pola "DOB" i "Wiek", więc możemy mieć dekorator @ api.onchange dla "DOB", gdzie po zmianie wartości "DOB" możesz obliczyć pole "wiek".

Możesz wyróżnić podobieństwa w @ api.depends i @ api.onchange, ale niektóre różnice polegają na tym, że zakres zmiany jest ograniczony do tego samego ekranu/modelu, podczas gdy @ api.depends działa również na inny pokrewny ekran/model.

Aby uzyskać więcej informacji, Here jest linkiem, który opisuje wszystkie API Odoo v8.

+0

Dzięki [email protected] Patadia za twoje wyjaśnienie. –

+0

dobre wyjaśnienie na przykładzie. Dziękuję za udostępnienie. –

3

@ api.onchange działa w przypisaniu wirtualnych rekordów do tych rekordów nie jest zapisywane w bazie danych, używane tylko do sprawdzenia, którą wartość wysłać do klienta.

Pola można obliczyć (zamiast odczytać z bazy danych) za pomocą parametru obliczeniowego, należy przypisać do pola wartość obliczoną, wykorzystuje ona wartości innych pól z tego samego modelu lub innych modeli (w przeciwieństwie do @api. onchange, który działa tylko z polami w tym samym widoku), powinien określać pola przy użyciu api.depends ().

Aby uzyskać więcej informacji. Sprawdź nasz blog: https://odooforbeginnersblog.wordpress.com/2017/03/01/how-to-override-an-api-depends-decorated-method/

Powiązane problemy