2016-07-20 12 views
0

Ich versuche ein benutzerdefiniertes Feld zu Odoo 9 res.partner Modell mit Modul hinzuzufügen. Ich habe den Befehl scoffold verwendet, um die Moduldateien zu generieren, und folgenden Code zu models.py und views.xml hinzugefügt.Fehler beim Hinzufügen eines benutzerdefinierten Felds mit dem Modul: ParseError: "arch" beim Analysieren der Datei

models/models.py

from openerp import models, fields, api 
class SeicoPartner(models.Model): 
    _name = 'res.partner' 
    _inherit = 'res.partner' 

    no_of_ac = fields.Integer('No of AC', default=0) 
    review = fields.Char('Company Review') 

views/views.xml

<openerp> 
<data> 
    <record id="res_partner_field_ac" model="ir.ui.view"> 
     <field name="no_of_ac">10</field> 
    </record> 
</data> 
</openerp> 

Bei der Installation dieses Moduls von Apps Bildschirm, bekam ich folgende Fehlermeldung:

Traceback (most recent call last): 
    ... 
    File "C:\Program Files (x86)\Odoo 9.0-20160719\server\openerp\addons\base\ir\ir_ui_view.py", line 344, in create 
ParseError: "arch" while parsing file:///C:/Program%20Files%20(x86)/Odoo%209.0-20160719/server/openerp/addons/mymodule1/views/views.xml:4, near 
<record id="res_partner_field_ac" model="ir.ui.view"> 
      <field name="no_of_ac">10</field> 

     </record> 

Von die Settings -> Database Structure -> Fields Ich kann sehen, dass res.partner hat das Feld, aber das Feld ist nicht sichtbar beim Bearbeiten von Kundendaten.

Antwort

1

Das ist, weil Sie den Bogen Feld sind vermisst mit dem Typ der Ansicht (entweder XML oder HTML) beschreiben, xml in den meisten Fällen nur in Ordnung ist,

Sie sind auch die Modellbezeichnung fehlen, wobei die Ansicht Name , also weiß odoo nicht, zu welchem ​​Modell Ihre Ansicht gehört. Sie müssen auch das vorhandene Modellformular angeben, das Sie übersteuern möchten, und die Position, an der das neue Feld angezeigt werden soll. In diesem Fall habe ich einen xpath-Ausdruck verwendet, um das Feld nach dem Websitefeld in der übergeordneten Ansicht anzuzeigen sei überall, wo du es haben willst.

<openerp> 
<data> 
    <record id="res_partner_field_ac" model="ir.ui.view"> 
     <field name="name">res.partner.form</field> 
     <field name="model">res.partner</field> 
     <field name="inherit_id" ref="base.view_partner_form"/> 
     <field name="arch" type="xml"> 
     <xpath expr="//field[@name='website']" position="after"> 
      <field name="no_of_ac" /> 
     </xpath> 
     </field> 
    </record> 
</data> 
</openerp> 

auch brauchen Sie nicht _name angeben, wenn Sie nur ein Modell erweitern möchten, und fügen Sie zusätzliche Felder es, so dass Ihr Modellcode ein neues ändern zu diesem

from openerp import models, fields, api 
class SeicoPartner(models.Model): 
    _inherit = 'res.partner' 

    no_of_ac = fields.Integer('No of AC', default=0) 
    review = fields.Char('Company Review') 
+0

können Sie nicht einfach hinzufügen das Feld in die Ansicht: Sie müssen eine andere Komponente der Ansicht angeben, an die das Feld "attach" –

+0

Ich habe diese Methode versucht, um meinen Fehler zu beheben, aber immer noch den Fehler "Element" ' kann nicht in der Elternansicht gefunden werden "... Jetzt sagen Sie mir, was ich tun soll, um es zu lösen.Wie ich bin ein neuer Benutzer von Odoo, also brauche deine Hilfe. – user6592626

+0

@ user6592626 sehe meine Bearbeitung – danidee

1

Sie einfügen Aufzeichnung in ir.ui.view Datenmodell.

<openerp> 
<data> 
    <record id="res_partner_field_ac" model="ir.ui.view"> 
     <field name="no_of_ac">10</field> 
    </record> 
</data> 
</openerp> 

Aber Sie wollen Daten einzufügen: res.partner

<openerp> 
<data> 
    <record id="res_partner_field_ac" model="res.partner"> 
     <field name="name">a name here because it's required when the field type != 'contact' </field> 
     <field name="no_of_ac">10</field> 
    </record> 
</data> 
</openerp> 

Hinweis: Sie ein Problem aufgetreten, weil arch ein requrired Feld in ir.ui.view Modell.

+0

hast du es versucht !!! – Cherif

+0

Ich habe es versucht, aber immer noch die folgenden Parse Error: "neue Zeile für die Beziehung" res_partner "verletzt Prüfbedingung" res_partner_check_name " – user6592626

+1

diese erreur, denn wenn der Name null ist muss das Feld Typ" Kontakt "so in Ihrem Fall der Name sein ist erforderlich, also fügen Sie Ihrem Code hinzu – Cherif

1

Wenn Sie einen Datensatz hinzufügen möchten Sie res.partner als Modell verwenden sollten, und definieren Sie die erforderlichen Felder aus:

<record id="res_partner_field_ac" model="res.partner"> 
    <field name="no_of_ac">10</field> 
    <field name="name">NEW PARTNER NAME</field> 
    <!-- define required fields --> 
</record> 

eine Ansicht zu definieren, werfen Sie einen Blick auf Odoo views

Verwandte Themen