OpenERP中相关字段的用途是什么?

时间:2010-10-08 04:20:55

标签: python openerp

有人可以向我解释有关相关领域的事情。例如 -

  • 如何使用
  • 如何提供帮助
  • 对于哪种情况,我应该使用fields.related

如果有人可以为字段的实际使用提供一个小例子。相关我会很感激。

4 个答案:

答案 0 :(得分:9)

它允许您从相关表中提取字段。您可以在developer book中找到更多详细信息,查看的一个示例是order_partner_id类的sale_order_line字段。在版本5.14中,这是addons/sale/sale.py的第806行。

我经常发现我想在列表中显示一个字段,但是它在父记录上而不是我列出的实际表中。

答案 1 :(得分:8)

使用相关字段时,您必须先选择要关联的字段。例如,我正在创建一个用于添加学生详细信息的新模块。这里的学生实际上是合作伙伴。因此_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'

答案 2 :(得分:1)

您可以在OpenERP开发人员文档中找到一个示例,在数据库规范化中,它称为Transitive dependency

答案 3 :(得分:1)

相关字段将控件引导到另一个表,父表将与子表具有onetomany关系,并且子表与父表具有多个关系。 例如: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','Invoice Reference',ondelete ='cascade',select = True),