无法将字段添加到many2many关系类

时间:2016-12-29 09:22:58

标签: openerp

我创建了一个与文本类有很多关系的网站类。我正在尝试为many2many关系类添加一些属性。 这是网站类:

class site(models.Model):
    _name ='ab.site'
    name = fields.Char('Name')
    text_ids = fields.Many2many('ab.site.text',
                                    'ab_site_text_rel',
                                    'text_id',
                                    'site_id',
                                    'Texts')

这是文本类:

class text(models.Model):       
    _name = 'ab.text'
     name = fields.Char('Title', required=True)

我需要在文本类和网站类上同时创建不合格,用户可以根据法律文本在网站中添加不合格列表,因此不合格类是与这两者相关,这就是我试图将它添加到关系类的原因。 我创建了关系类,我添加了适用性字段(boolean)和one2many字段(不符合):

class ab_site_text_rel(models.Model):
    _name = "ab.site.text.rel"
    _rec_name = "site_id"
    site_id = fields.Many2one('ab.site', 'Site', ondelete='cascade')
    text_id = fields.Many2one('ab.site.text', 'Text', ondelete='cascade')
    applicability = fields.Boolean(string='Applicability')
    nonconformity_ids = fields.One2many('ab.nonconformity','ab_site_text_rel','Non-conformities')

运行服务器时出现此错误:

File "/home/euromed/git/odoo9/openerp/modules/registry.py", line 200, in setup_models
model._setup_fields(cr, SUPERUSER_ID, partial)
File "/home/euromed/git/odoo9/openerp/api.py", line 250, in wrapper
return old_api(self, *args, **kwargs)
File "/home/euromed/git/odoo9/openerp/api.py", line 354, in old_api
result = method(recs, *args, **kwargs)
File "/home/euromed/git/odoo9/openerp/models.py", line 3046, in _setup_fields
field.setup_full(self)
File "/home/euromed/git/odoo9/openerp/fields.py", line 495, in setup_full
self._setup_regular_full(model)
File "/home/euromed/git/odoo9/openerp/fields.py", line 1893, in _setup_regular_full
invf = comodel._fields[self.inverse_name]
KeyError: 'ab_site_text_rel'

1 个答案:

答案 0 :(得分:2)

关系字段:

关系字段是具有引用其他对象的值的字段。关系可以是单向或双向的。

一般来说,主要有三种类型的关系。

<强> 1。 Many2one

与其他对象的正常关系(使用外键)

like this

发票行包含发票的引用(invoice_id)

invoice_id = fields.Many2one(comodel_name='account.invoice', string='Invoice')

<强> 2。 One2many

  • 与多个对象的虚拟关系(与many2one相反)。
  • one2many关系字段提供了一种“容器”关系: 关系另一边的记录可以看作是 “包含”在此方的记录中。
  • 在表A和表B之间的一对多关系中的行 表A链接到表B中的零行,一行或多行 relationship允许将信息保存在表中并引用 很多次在其他表格中。

enter image description here

invoice_line = fields.One2many(comodel_name='account.invoice.line', inverse_name='invoice_id', string='Invoice Line')

第3。 Many2many

  • 对象之间的双向多重关系。

  • 这是最常见的一种关系:记录可能与另一方的任意数量的记录有关,反之亦然。

  • 在多对多关系的情况下,Products中的每一行都链接到Taxes中的零行,一行或多行,反之亦然。通常,New Table需要一个映射表来映射这种关系。

  • 在这种关系中,新表需要存储参考 两张桌子。 enter image description here

Many2many字段定义。

taxes_id = fields.Many2many(comodel_name='account.tax', relation='product_taxes_rel', column1='prod_id', column2='tax_id', string='Customer Taxes')

=============================================== =========================

实际上,在这个框架中,我们不需要关心M2M的关系表,它将被自动管理。所以在你的情况下,它不是必需的。而且我不确定你为什么要创建这个课程,特定于你的要求。并尝试使用您想要实现的目标更新问题。

类ab_site_text_rel(models.Model):

这不是必需的。