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, когда он должен что-то возвращать.