【问题标题】:Odoo: get type of field by nameOdoo:按名称获取字段类型
【发布时间】:2017-04-29 09:10:00
【问题描述】:
在 odoo 中,您可以通过它的 str 名称获取字段的值:
例:
name = getattr(self, 'name')
我现在想知道字段名称的类型是什么:
fields.Char, fields.Many2one, fields.Many2many .....
所以我需要的是这样的东西
gettype(self, 'user_id')
现在有没有办法知道odoo中的字段类型是什么?
【问题讨论】:
标签:
openerp
odoo-8
odoo-9
odoo-10
【解决方案1】:
您可以从 ir.model.fields 模型中搜索。
ir_model_obj=self.env['ir.model.fields']
ir_model_field=ir_model_obj.search([('model','=',model),('name','=',field)])
field_type=ir_model_field.ttype
if field_type=='many2one':
print "do operation"
这可能会对你有所帮助。
【解决方案2】:
Odoo 在_fields 属性中提供此信息,我认为这更好,因为每件事都发生在Python 方面,无需联系数据库,尤其是在我的情况下,我的模型有多个30 字段:
for name, field in self._fields.iteritems():
if not isinstance(field, (fields.Many2one, fields.Many2many, fields.One2many)):
# logic go here
如果您只想验证一个字段:
if not isinstance(self._fields[field_name], (fields.Many2one, ...)): # do something