继承account.invoice时字段不存在错误

时间:2017-04-27 13:32:11

标签: openerp odoo-10

使用Odoo 10(从GitHub提交7413b26,分支10.0),安装我从Odoo 8移植的模块失败,因为没有在继承的{{1 }}。问题是,在继承的模型中创建了 这个字段,问题仍然存在,能够创建MCVE来说明行为:

account.invoice

invoice.py

from odoo import fields, models class AccountInvoice(models.Model): _inherit = 'account.invoice' a = fields.Char()

invoice.xml

<?xml version="1.0" encoding="utf-8"?> <openerp> <data> <record model="ir.ui.view" id="account_invoice_form_view"> <field name="name">account.invoice.form</field> <field name="model">account.invoice</field> <field name="type">form</field> <field name="inherit_id" ref="account.invoice_form"/> <field name="arch" type="xml"> <field name="origin" position="after" > <field name="a" /> </field> </field> </record> </data> </openerp> __manifest__.py{'name':'Invoice bug','depends':['account'],'data':['invoice.xml'],'installable':True}只是通常的__init__.py

此类代码以

失败
import invoice

以下是一些更多的观察结果:

  • 继承另一个模型和视图,例如ParseError: "Error while validating constraint Field `a` does not exist Error context: View `account.invoice.form` [view_id: 554, xml_id: invoice_bug.account_invoice_form_view, model: account.invoice, parent_id: 421] None" while parsing /odoo/addons/invoice_bug/invoice.xml:4, near [XML follows] 和查看product.template(使用product.product_template_only_form_view,可以正常使用
  • 使用<field name="default_code" position="after">代替<xpath expr="//field[@name='origin']" position="after">不会影响错误
  • 其他模块(例如原生field position="after"模块)成功地正确扩展了sale和相同的视图(account.invoice):sale/models/account_invoice.py:8sale/views/sale_views.xml:653 < / LI>
  • A similar bug exists since OpenERP 7
  • Odoo论坛成员看似had the same problem使用Odoo 8或9(提供的示例会导致相同的错误,前提是您将account.invoice_form的现已删除的引用替换为period_id)< / LI>
  • 无论安装的模块或存储的记录(在干净的DB + 3其他安装上测试)都会触发错误

我的代码是错误的,还是有解决方法?

3 个答案:

答案 0 :(得分:2)

account.invoice account.invoice.line 模型中提供

来源字段。

如果您在表单视图 invoice_form 中签入,那么我们会收到两次原始字段。

  1. invoice_line_ids 内联树状视图。

  2. 其他信息页。

  3. 如果我们写完字段位置之后系统会在 invoice_line_ids 内嵌树视图中找到第一个字段,由于这个原因我们会收到错误。

    但是Odoo提供了错误的错误消息。

    您需要按照以下xpath。

    <xpath expr="//page[@name='other_info']/group/group[2]/field[@name='origin']" position="after">
        <field name="a"/>               
    </xpath>
    

    这可能会对你有帮助。

答案 1 :(得分:0)

每件事都很好,应该将字段添加到模型中。 对你的问题的一个解释是odoo没有达到你的代码。

项目中是否只有一个init文件,或者您正在使用多文件夹项目。检查你的缩进。

答案 2 :(得分:0)

尝试更改标记

<openerp>..</openerp> to <odoo>..</odoo>