Python декораторы

Оригинальная статья

http://odoo-new-api-guide-line.readthedocs.org/en/latest/decorator.html

@ api.one

Предупреждение

декоратор устарел. Используйте взамен `` @ api.multi``

api.one предназначен для использования, когда метод вызывается только для одной записи. Это обеспечивает отсутствие множественных записей при вызове метода с помощью декоратора api.one. Допустим, у вас есть запись партнера = res.partner (1,). Это только одна запись, и есть метод, например (в res.partner)

@api.one
def get_name(self):
  return self.name #self here means one record

называть это так работает

partner.get_name()

Но если будет больше записей, например:

partners = res.partner(1, 2,)

вызов этого вызовет предупреждение, сообщающее, что вы можете вызывать его только на одной записи.

@ api.multi

Примечание

Методы без декораторов работают так же, как `` @ api.multi``

что нибудь. Например:

@api.multi
def get_partner_names(self):
  names = []
  for rec in self:
  names.append(rec.name)
  return ', '.join(names)

@ api.model

И api.model считается используемым, когда вам нужно что-то сделать с самой моделью, и вам не нужно изменять / проверять какие-то точные записи / записи модели. Например, может существовать метод, который возвращает некоторую метаинформацию о структуре модели или некоторые вспомогательные методы и т. Д. Также в документации говорится, что этот API хорошо использовать при переходе от старого API, поскольку он «вежливо» преобразует код в новый API. , Также по моему опыту, если вам нужен метод, чтобы вернуть что-то, модель декоратор подходит для этого. api.one возвращает пустой список, поэтому это может привести к неожиданному поведению при использовании метода api.one on, когда он должен что-то возвращать.