有人可以向我解释一下相关领域的事情。例如 -
- 它是如何使用的
- 如何帮助
- 对于哪种情况我应该使用 fields.related
如果有人可以提供一个真正使用fields.related的小例子,我将不胜感激。
它允许您从相关表中提取字段。您可以在开发人员手册中找到更多详细信息,其中一个示例是类的order_partner_id
字段sale_order_line
。在 5.14 版中,位于addons/sale/sale.py
.
我经常发现我想在列表中显示一个字段,但它位于父记录上,而不是我列出的实际表上。
使用相关字段时,您必须首先选择要关联的字段。例如,我正在创建一个用于添加学生详细信息的新模块。在这里,学生实际上是合作伙伴。所以_rec_name='partner_id'
采取了。res.partner
您可能已经看到了该ref
领域。该ref
字段中的值作为internal_number
学生模块的值。
所以我们在这里做的是
class student(osv.osv):
_name='student'
_rec_name='partner_id'
_columns ={
'partner_id':fields.many2one('res.partner','Name'),
'internal_number':fields.related(
'partner_id',
'ref',
type='char',
size=16,
string='Internal Number',
),
}
如果我们要显示为相关字段的字段是选择字段,那么您必须提供type='selection'
、 和selection=[(case1,case1),(case2,case2),...]
,一个元组列表。如果它是一个 many2one 字段,那么type='many2one'
和relation='model_name'
。
相关字段将控件引导到另一个表,父表将与子表具有单对多关系,子表与父表具有多对单关系。例如:account.invoice 到 account.invoice.line 具有以下字段
'invoice_line': fields.one2many('account.invoice.line', 'invoice_id', 'Invoice Lines', readonly=True, states={'draft':[('readonly',False)]}),
和 account.invoice.line 与 account.invoice 相关,下面的代码相反。
'invoice_id': fields.many2one('account.invoice', '发票参考', ondelete='cascade', select=True),
您可以在 OpenERP 开发人员文档中找到一个示例,在数据库规范化中它被称为传递依赖。