Odoo域无法从域中过滤单位和小时

时间:2017-11-21 13:24:58

标签: 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"/>

问题是在product_uom下拉列表中我找不到Unit(s)和Hour(s)。这些字段名称有什么问题?

P.S。例如,如果我在我的PgAdmin select * from product_uom where name in ('Unit(s)', 'Hour(s)')中制作简单的sql,一切都很好。

解决:

将我的代码更改为:

@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)]

1 个答案:

答案 0 :(得分:2)

可能是你可以用户搜索读取来提取 翻译单位价值:

 product_uom = fields.Many2one('product.uom', 'Unit of Measure', required=True, 
   domain=lambda self: self.get_domain())



 @api.multi
 def get_demain(self):
    """get default domain for uom taking languange in considiration"""
    lang = self.env.context.get('lang')
    domain_list = ['m', 'Hour(s)', 'mile(s)', 'Day(s)', 'unit(s)'])]
    if lang and lang != 'en':
        # language is not english
        result = self.env['ir.translation'].search_read([
                                                        ('lang', '=', lang), 
                                                        ('src', 'in', domain_list),
                                                        ('name', '=', 'product.uom')], 
                                                ['value'])
        domain_list = [rec['value'] for rec in result]

    return [('name', 'in', domain_list)]

我没有尝试过代码,但我认为你可以做得更好,希望这对你有所帮助。如果用户语言中没有这个词的翻译,可能会等等。