视图的介绍
如果所有的数据存储于对象中,这章将讲述这些对象如何将数据返回给用户。
首先,注意到每个资源类型使用其自己的接口。例如,页面上修改一个合作者数据与修改一个发票是不同的。
稍后,你得知道OpenERP用户接口是动态的。意味着其不能通过一些代码静态描述,而是动态地从客户端的XML描述符中构建。
现在开始,我将调用这些屏幕描述视图。
这些视图的一个值得注意地地方是它们能够随时被修改(即使是程序运行时)。在一个显示的视图显示后,你只需要关闭与这个视图对应的tab并重新打开它。
Views principles(视图规则)
视图描述了每个对象(资源类型)是如何显示的。更精确地说,对于每个对象,我们能够定义一个或者几个视图来描述哪些字段应该描绘和如何描述。
有两种类型的视图
- 表单视图
- 树视图
注意:从4.1开始,表单视图也能包含图表。
表单视图
在一个表单视图中的字段配置总是遵照以下相同的规则。字段按照以下规则分布在屏幕上。
- 默认地,每个字段前面有一个标签,即其名字
- 字段在屏幕上按照从左到右的顺序排列,和从上到下的顺序,这些对应着它们在视图中声明的顺序。
- 每个屏幕划分为四列。每列要不能够持有一个标签,或者一个”edition“字段。因为每个编辑字段是用其名字作为标签名,所以了在屏幕中的每一行有两个字段(和其独立的标签)。在下面屏幕中显示的红绿区域,列举了四列。它们分开设计其标签和对应的字段。
视图也支持更多高级的配置选项:
- 一个视图字段可以使用多列。例如,在下面显示的屏幕中,蓝色框架中的区域实际上仅仅是”one to many“的字段。这点之后再讨论。但是值得注意的是其占满了屏幕的宽度而不仅仅是一列。
- 我们也可以做出相反的操作。取得一列分组并如你所想的划分成多列。上述屏幕中环绕的红色区域是很好的例子。准确地说,上面的绿色框架和右边占了两列,但是了包含了4列。
如我们在下面屏幕中所见的绿色区域,也有一种方式在不同的tabs中分布一个对象的字段。
On Change
on_change属性定义了当视图字段内容变更时要调用的方法。
这个方法至少要传递以下参数:cr,uid,ids,是三个典型参数并且也包含上下文字典。你可以为这个方法添加参数。它们必须对应到视图中定义的其他参数,并且也必须使用这种方式在XML中用字段定义。
<field name="name_of_field" on_change="name_of_method(other_field'_1_', ..., other_field'_n_')"/>
下面的例子来自销售订单视图
你可以使用'context' 关键字来访问上下文中的数据,其可以用作函数的参数:
<field name="shop_id" on_change="onchange_shop_id(shop_id)"/>
def onchange_shop_id(self, cr, uid, ids, shop_id):
v={}
if shop_id:
shop=self.pool.get('sale.shop').browse(cr,uid,shop_id)
v['project_id']=shop.project_id.id
if shop.pricelist_id.id:
v['pricelist_id']=shop.pricelist_id.id
v['payment_default_id']=shop.payment_default_id.id
return {'value':v}
当编辑shop_id表单字段时,sale_order对象的onchange_shop_id方法将被调用并且返回一个字典,其中的value键含有新值得一个字典在'project_id','pricelist_id' 和'payment_default_id' 字段中使用。
注意:这里不仅仅可以改变字段的值。例如,通过返回表单的值:返回 {'domain': d, 'value': value},很可能改变一些字段的值和其他字段的领域。
返回:有下面关键字混合的字典
domain
{field: domain}.的映射
返回的领域应该在字段上设置而不是默认的
value
{field: value}}的映射,值将在对应的字段上设置并且可能触发新的新的变化或者属性变更
warning 一个有关键字title和message的字典。
两个都是必须的。指明稍后一个错误信息将显示给用户。
详情请看下一节