获取模型中的字段值,字典样式
get a field value in model, dictionary style
我想通过将字段名称作为字符串传递给函数来获取模型中字段的值,就像使用 python 字典 dict.get(key)
完成的那样,我在模型中定义了一个函数,如:
def get(self, key):
key = key.replace('_', '.')
return self.__dict__.get('_prefetch').get(key)
我的问题是,odoo 模型中是否有预定义的函数可以做到这一点,如果没有,我该如何以更 pythonic 的方式做到这一点?
提前致谢。
Odoo 的 BaseModel
class 已经实现 __getitem__
1 允许使用 "named indeces": recordset['field_name']
来自 Odoo 12.0 odoo.models.BaseModel:
def __getitem__(self, key):
""" If ``key`` is an integer or a slice, return the corresponding record
selection as an instance (attached to ``self.env``).
Otherwise read the field ``key`` of the first record in ``self``.
Examples::
inst = model.search(dom) # inst is a recordset
r4 = inst[3] # fourth record in inst
rs = inst[10:20] # subset of inst
nm = rs['name'] # name of first record in inst
"""
if isinstance(key, pycompat.string_types):
# important: one must call the field's getter
return self._fields[key].__get__(self, type(self))
elif isinstance(key, slice):
return self._browse(self._ids[key], self.env)
else:
return self._browse((self._ids[key],), self.env)
所以在记录集上,将读取第一条记录的属性。如果可能,请尝试在单例上使用它。
1 有关泛型类型的更多信息 click here
我想通过将字段名称作为字符串传递给函数来获取模型中字段的值,就像使用 python 字典 dict.get(key)
完成的那样,我在模型中定义了一个函数,如:
def get(self, key):
key = key.replace('_', '.')
return self.__dict__.get('_prefetch').get(key)
我的问题是,odoo 模型中是否有预定义的函数可以做到这一点,如果没有,我该如何以更 pythonic 的方式做到这一点? 提前致谢。
Odoo 的 BaseModel
class 已经实现 __getitem__
1 允许使用 "named indeces": recordset['field_name']
来自 Odoo 12.0 odoo.models.BaseModel:
def __getitem__(self, key):
""" If ``key`` is an integer or a slice, return the corresponding record
selection as an instance (attached to ``self.env``).
Otherwise read the field ``key`` of the first record in ``self``.
Examples::
inst = model.search(dom) # inst is a recordset
r4 = inst[3] # fourth record in inst
rs = inst[10:20] # subset of inst
nm = rs['name'] # name of first record in inst
"""
if isinstance(key, pycompat.string_types):
# important: one must call the field's getter
return self._fields[key].__get__(self, type(self))
elif isinstance(key, slice):
return self._browse(self._ids[key], self.env)
else:
return self._browse((self._ids[key],), self.env)
所以在记录集上,将读取第一条记录的属性。如果可能,请尝试在单例上使用它。
1 有关泛型类型的更多信息 click here