display_name
有次无意发现form视图存在display_name字段,但是明明没有定义,于是好奇哪里来的。
研究源码:
@api.model
def _add_magic_fields(self):
..........
def add(name, field):
""" add ``field`` with the given ``name`` if it does not exist yet """
if name not in self._fields:
self._add_field(name, field)
add('display_name', fields.Char(string='Display Name', automatic=True,
compute='_compute_display_name'))
@api.depends(lambda self: (self._rec_name,) if self._rec_name else ())
def _compute_display_name(self):
names = dict(self.name_get())
for record in self:
record.display_name = names.get(record.id, False)
由此可见,display_name是根据compute计算字段而来的,是系统自己添加的,而且由name_get形成的。为了验证,打开了模型,调用fields_get(),果然有display_name字段,而且视图字段也是有该字段的,并不会存数据库中。
发现问题,有时耐心地查看源码,能解决大部分问题。