如何在One2many / Many2many字段中获取非活动记录?

for*_*vas 2 python python-2.7 odoo odoo-8

让我们用一个简单的One2many举个例子:假设一个人可以养几个宠物,但是一个宠物只能拥有一个主人:

class Pet(models.Model):
    _name='pet'

    owner_id = fields.Many2one(
        comodel_name='person',
        string='Owner',
    )
    active = fields.Boolean(
        string='Active',
        default=True,
    )

class Person(models.Model):
    _name='person'

    pet_ids = fields.One2many(
        comodel_name='pet',
        inverse_name='owner_id',
        string='Pets',
    )
Run Code Online (Sandbox Code Playgroud)

现在,您有一个人(Id:1)拥有两个宠物(Id:56,57),但是其中一个宠物是不活跃的(Id:57的宠物)。如果打印person.pet_ids,Odoo将返回pet(56,)。不活动的记录不包括在那里。打印时有什么办法显示它们person.pets_ids吗?

到目前为止,我做到了:

pets = self.env['pet'].search([
    ('owner_id', '=', person.id),
    '|',
    ('active', '=', True),
    ('active', '=', False),
])
Run Code Online (Sandbox Code Playgroud)

但是我想知道是否有更好的方法。

pho*_*ogl 5

你可以通过

{'active_test': False}
Run Code Online (Sandbox Code Playgroud)

在上下文中。在您的情况下:

pets = self.env['pet'].with_context(active_test=False).search([('owner_id', '=', person.id)])
Run Code Online (Sandbox Code Playgroud)

  • 您的解决方案也适用于记录集,因此更加简单:`person.with_context({'active_test':False,})。pet_ids`。非常感谢@phogl! (2认同)