Xml Odoo域可以';t从域开始的筛选单位和小时数

Xml Odoo域可以';t从域开始的筛选单位和小时数,xml,odoo,odoo-9,Xml,Odoo,Odoo 9,我有多个字段,试图按名称筛选度量单位: product_uom = fields.Many2one('product.uom', 'Unit of Measure', required=True, domain="[('name', 'in', ['m', 'Hour(s)', 'mile(s)', 'Day(s)', 'unit(s)'])]") xml字段: <field name="product_uom"/> 可能您可以通过用户搜索读取来提取 单位换算值: produc

我有多个字段,试图按名称筛选度量单位:

product_uom = fields.Many2one('product.uom', 'Unit of Measure', required=True, domain="[('name', 'in', ['m', 'Hour(s)', 'mile(s)', 'Day(s)', 'unit(s)'])]")
xml字段:

 <field name="product_uom"/>

可能您可以通过用户搜索读取来提取 单位换算值:

product\u uom=fields.manyOne('product.uom','Unit of Measure',required=True,
domain=lambda self:self.get\u domain())
@api.multi
def get_demain(自我):
“”“获取一致性中采用语言的计量单位的默认域”“”
lang=self.env.context.get('lang')
域_列表=['m'、'小时'、'英里'、'天'、'单位]]
如果朗和朗嗯:
#语言不是英语
结果=self.env['ir.translation'].search\u read([
('lang','=',lang),
('src','in',域列表),
('name'、'='、'product.uom')],
['value'])
域\u列表=[rec['value']用于结果中的rec]
返回[('name','in',domain_list)]

我没有尝试代码,但我认为你可以做得更好,希望这对你有帮助。例如,如果用户语言中没有此词的翻译,则可能是因为用户语言不是英语,
Hour(s)
Unit(s)
的计量单位名称被翻译为用户语言,因此在应用域时找不到值(
product.uom
字段
name
可翻译)是的,那是个问题。当我把语言改成英语时,一切都很好。所以我需要找另一种语言来过滤。我更新了我的问题。稍微修改了你的代码,它就工作了!但我认为我应该接受我的答案,毕竟这个想法就是编程中的一切^^^^正如我告诉你的,如果每个单元都有翻译,你需要检查k如果搜索返回的所有项目在原始列表中也是相同的。是的,我遇到了一个问题,即“m”单位没有翻译。我将其添加到翻译中,现在一切正常。但您应该在代码中执行此操作,只需检查结果并添加缺少的单位。而且您没有接受我的anwser mmmm不好hhh
@api.multi
def get_domain(self):
    lang = self.env.context.get('lang')
    domain_list = ['m', 'Hour(s)', 'mile(s)', 'Day(s)', 'Unit(s)']
    if lang and lang != 'en_US':
        result = self.env['ir.translation'].search_read([
                                                    ('lang', '=', lang), 
                                                    ('src', 'in', domain_list)])
        domain_list = [rec['value'] for rec in result]
    return [('name', 'in', domain_list)]