Odoo 8 - просмотр записей эквивалентен новому API?

Я прочитал новую документацию API Odoo 8, но не смог ее найти (если она есть). Как напрямую просматривать записи/записи с новым API, когда у вас есть идентификатор/идентификатор модели?

Например, допустим, я хочу просмотреть модель res.partner и получить список идентификаторов: ids = [1, 2, 3].

Со старым API вы могли бы сделать это так:

partners = self.pool.get('res.partner').browse(cr, uid, ids)

С новым API единственным способом, который я мог придумать, было использовать поиск, поскольку он возвращает записи (а не идентификаторы, как в старом API), например:

partners = self.env['res.partner'].search([('id', 'in', ids)])

Это дает те же результаты, но меня интересует производительность (это то же самое?) и удобство (чтобы избежать использования поиска, когда вы уже знаете идентификаторы, просто нужно просмотреть записи)?

Или поиск является предпочтительным способом в новом API для использования, когда вам нужно просматривать записи?


person Andrius    schedule 05.02.2015    source источник


Ответы (2)


Вы по-прежнему можете использовать browse с новым API. Для этого гораздо меньше причин, потому что с новым API вы обычно имеете дело с наборами записей, а не списками числовых идентификаторов. Но вы абсолютно можете использовать browse в нечетные моменты времени, когда вам это действительно нужно:

partner_ids = [1, 2, 3]
partners = self.env['res.partner'].browse(partner_ids)
person Ludwik Trammer    schedule 05.02.2015
comment
Спасибо, не думал, что это реализовано напрямую в новом API :). Да, обычно мне не нужно просматривать его, но при работе с некоторыми старыми методами иногда вы получаете идентификаторы вместо наборов записей. Так удобнее просматривать, а не искать то, что вы уже знаете. - person Andrius; 05.02.2015
comment
Есть слой автоматического перевода. Все методы, определенные с помощью нового API, можно вызывать с помощью старого API (с аргументами cr, uid, context, ...), а старые методы, определенные с помощью старого API, можно вызывать с помощью нового API (без явного указания cr, uid). , контекст, ... аргументы). Так что не имеет значения, был ли конкретный метод переписан для нового API или нет (на самом деле browse был переписан). Вы все еще можете вызывать его точно так же, используя новый API. - person Ludwik Trammer; 05.02.2015
comment
Да, я знаю. Я говорил о методах, предназначенных для возврата идентификаторов, а не наборов записей. Например, общий метод get_external_id() возвращает словарь, который имеет key в качестве идентификатора записи и value в качестве внешнего идентификатора, даже если вы вызываете его с помощью нового API. - person Andrius; 05.02.2015

класс Verify_Time (models.Model): _name = 'verify.time'

@api.model
def default_get(self, fields_name):
    update_ids = []
    data = super(Verify_Time, self).default_get(fields_name)
    if self._context.get('active_id'):
        student_id = self._context.get('active_id')
        for record in self.env['student.student'].browse(student_id):
            for time_record in record.time_table_ids:
                update_ids.append((0,0,{'standared_id':time_record.standared_id.id,
                                        'subject_id':time_record.subject_id.id,
                                        'start_time':time_record.start_time,
                                        'end_time':time_record.end_time}))
    data['s_time_ids'] = update_ids
    return data

s_time_ids = fields.One2many('s.time', 'verify_id', 'Time')
verify = fields.Selection(VERIFY, 'Verified?')

класс S_Time(models.Model): _name='s.time'

verify_id = fields.Many2one('verify.time', 'Verify')
serial_no = fields.Integer('#')
standared_id = fields.Many2one('standared.standared', 'Standared')
subject_id = fields.Many2one('section.section', 'Subject')
start_time = fields.Datetime('Start Time')
end_time = fields.Datetime('End Time')
person Elcin    schedule 20.11.2015