首页 > 解决方案 > 如何在 many2one 字段中返回列表对象

问题描述

我已经声明了一个 many2one 字段

packaging_id = fields.Many2one(
        'product.packaging', 'Package type', compute='_compute_package_type',
        index=True)

所以我需要制定一个逻辑来返回我想在列表中显示的对象。我已经使用计算选项进行了尝试,但我不确定这是否正确。关注我的计算领域

@api.multi
    def _compute_package_type(self):
        pckdel = self.batch_id.package_delivery_group
        order = self.env['ord.data'].search([("pckdelgrp", "=", pckdel)], limit=1)
        type = self.env['delivery.carrier'].search([("name", "=", order.deliverymethod)], limit=1)
        if type.delivery_type == 'test' or type.delivery_type == 'xxx':
            package_objs = self.env['product.packaging'].sudo().search([])
        else:
            package_objs = self.env['product.packaging'].search([("packager_carrier_type", "=", type.delivery_type)])
        self.packaging_id =  package_objs.ids

但是它失败了,并且没有出现带有 package_objs 的下拉列表。有人可以帮我吗?

非常感谢你

标签: pythonodoo-11

解决方案


在这种类型的场景中,您应该domain使用compute

def compute_package_type(self):
            pckdel = self.batch_id.package_delivery_group
            order = self.env['ord.data'].search([("pckdelgrp", "=", pckdel)], limit=1)
            type = self.env['delivery.carrier'].search([("name", "=", order.deliverymethod)], limit=1)
            if type.delivery_type == 'test' or type.delivery_type == 'xxx':
                package_objs = self.env['product.packaging'].sudo().search([])
            else:
                package_objs = self.env['product.packaging'].search([("packager_carrier_type", "=", type.delivery_type)])
            return [('id','in',package_objs.ids)]


packaging_id = fields.Many2one(
        'product.packaging', 'Package type', domain=compute_package_type)

推荐阅读