视图应该继承什么?

时间:2013-12-06 17:30:42

标签: python xml openerp

我想在这里做一些非常简单的事情。但我在文档中,SO上或http://help.openerp.com

上找不到任何内容

我在表单上添加了一个字段(与另一个表有很多关系)。这创建了一个下拉菜单,可以选择或创建新值。

如果单击“创建和编辑”,将打开一个新窗口,您可以在其中填写一个字段并保存。但该领域的标签是“未知”。有人向我解释说我需要为这个表单创建一个视图。

所以我做了,我创建了这个视图,起初,我继承了另一种形式(用户的一种),但它给我带来了错误,抱怨缺少字段。我的问题是:我应该继承什么?

该过程在没有为此定义我自己的视图的情况下工作,但每当我选择一个现有记录,创建一个新记录时,该值不会出现,而是我拥有该表的名称,并将其标识符作为链接到记录(如果我没记错的话会打开一个新窗口)。有没有办法进行查找,并显示值?

这里是代码:

counties_view.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <record model="ir.ui.view" id="hubclub_counties_form">
            <field name="name">hubclub.counties.form</field>
            <field name="model">hubclub.counties</field>
            <field name="inherit_id" ref="base.view_users_form"/>
            <field name="arch" type="xml">
                <group>
                    <field name="county" />
                </group>
            </field>
        </record>
    </data>
</openerp>

额外attributes.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <record model="ir.ui.view" id="hubclub_res_users_form">
            <field name="name">res.users.form</field>
            <field name="model">res.users</field>
            <field name="inherit_id" ref="base.view_users_form"/>
            <field name="arch" type="xml">
                <xpath expr="/form/sheet/notebook/page[2]" position="after">
                    <page string="Hubclub specific settings">
                        <group>
                            <field name="county_id" />
                        </group>
                    </page>
                </xpath>
            </field>
        </record>
    </data>
</openerp>

OpenERP的的.py

# -*- coding: utf-8 -*-

{
    'name': 'Hubclub module',
    'version': '1.0',
    'author': 'Openapp',
    'category': 'Tools',
    'depends': ['base', 'point_of_sale'],
    'data': ['extra-attributes.xml', 'counties_view.xml'],
    'demo': [],
    'installable': True,
}

hubclub_module.py

# -*- coding: utf-8 -*-

from openerp.osv import fields, osv


class hubclub_counties(osv.osv):
    _name = 'hubclub.counties'
    _columns = {
        'county': fields.text(),
    }
    _sql_constraints = [('county_uniq', 'unique(county)',
                         'Country already exists')]


# User
class res_users(osv.osv):
    _name = 'res.users'
    _inherit = 'res.users'
    _columns = {
        'county_id': fields.many2one('hubclub.counties', 'County'),
    }
    _defaults = {
    }


res_users()
hubclub_counties()

2 个答案:

答案 0 :(得分:1)

我不确定,但你可以试试这个:

_rec_name="your_many2one_field_name"

答案 1 :(得分:1)

  1. 该字段的标签为“未知”:
  2. 这是因为对于模型hubclub.counties,对于字段'county',您没有指定任何标签。您必须在python端或xml端指定标签

    在python方面:

    _columns = {
            'county': fields.text("the label for the field"),
        }
    

    在xml方面:

    <field name="county_id" string="label for the field"/>
    

    如果未在xml中指定label,则默认情况下它采用python端指定的标签。如果python中没有标签,那么label将是“Unknown”

    2.查看继承:

    在这里,您要在res.users中添加many2one字段“county”。为此,您必须首先在res.users中添加与hubclub.counties的关系。这是从python完成的。你已经正确完成了。问题出在您在counties_view.xml中定义的视图中。 base.view_users_form是为模型res.users定义的视图。您试图继承此视图。但您遇到的问题是您将视图的模型指定为<field name="model">hubclub.counties</field>这是错误的,因为模型hubclub.counties没有带引用base.view_users_form的视图。这就是错误出现的原因。在extra-attributes.xml中,您已正确更改它。对于继承视图,您必须指定正确的模型和inherit_id作为对视图的引用以及模块名称(例如<field name="inherit_id" ref="base.view_users_form"/>此处view_users_form是视图ID, base 是模块名称)和字段位置的路径。

    3.该字段的值作为模型名称和db引用:

    这实际上是由Odedra回答的

    对于我们创建的每个模型,我们必须指定在将此模型用于关系时应显示哪个字段的数据。默认情况下,会考虑“名称”字段。但是如果没有定义'name'字段,那么我们必须指定一个已经为该模型定义的字段。对于此过程,我们可以使用_rec_name

    _rec_name = "field_name"
    

    如果要显示2个或更多字段的数据作为记录的名称(例如,如果你转到产品的openerp中,那么它的名称就像变体名称,产品名称,代码)然后有一个函数被调用name_get(),可用于显示多个字段数据作为记录的名称。