如何在 OpenERP 7 中创建 one2many table 的摘要 table?
How to create a summary table of an one2many table in OpenERP7?
我有树模型:res.partner
、my_category
和 partner_my_category_rel
。合作伙伴和类别之间的关系是 many2many,但我需要在关系 table 中存储一些属性(不仅是 ID,还有注册日期),所以,如您所知,我必须自己创建中间体 table(我将其命名为 partner_my_category_rel
)。因此,在 res.partner
中,我有一个 one2many 字段指向 table partner_my_category_rel
.
现在我想创建一个摘要table。摘要 table 每个类别只能显示一行(这一行将是最后注册日期的那一行)。
示例:合作伙伴两次属于 gold 类别(注册日期为 19/09/08 和 31/12/09) 和 silver 类别一次(注册日期 20/04/13)。摘要 table 必须只显示两行,每行 gold,每行 silver (31/12/09 和 2013 年 4 月 ).
但我在每行添加了一个按钮 打开历史记录,以查看每个类别的所有记录,所以如果我在类别 的行中单击此按钮gold,将打开一个弹出窗口,我将能够在树视图中看到类别 gold 的两条记录。
完成(函数字段类型="one2many")。但它们必须是 editable。现在我的问题出现了。如果我开始编辑记录,即使我不保存更改,当我关闭表单时,没问题,但在这样做之后,如果我切换到其他合作伙伴并重复相同的过程,我会得到 JavaScript 关闭表单时出错:
未捕获类型错误:无法读取未定义的 属性'get'
我尝试了两种方法(在历史的树视图中添加 属性 editable="bottom"
,并创建一个表单以便能够通过单击它们来编辑历史记录)。两种情况都出现 JS 错误。
我不明白为什么(这不是关于特定记录的,因为我第一次打开的伙伴并不重要,它不会引发错误,但我以后打开的其他人都会).
带有编辑表单的案例
按钮代码打开历史记录
def open_history(self, cr, uid, ids, context=None):
""" Utility method used to add an "Open History" button in partner views """
partner_my_category_obj = self.browse(cr, uid, ids[0], context=context)
data_obj = self.pool.get('ir.model.data')
form_data_id = data_obj.get_object_reference(cr, uid, 'res_partner_extended', 'partner_category_rel_edit_form_view')
tree_data_id = data_obj.get_object_reference(cr, uid, 'res_partner_extended', 'partner_category_rel_tree_view')
form_view_id = form_data_id and form_data_id[1] or False
tree_view_id = tree_data_id and tree_data_id[1] or False
return {
'name': _('History of "%s"') % partner_my_category_obj.category_id.name,
'view_type': 'form',
'view_mode': 'form',
'view_id': False,
'views': [(tree_view_id, 'tree'), (form_view_id, 'form'),],
'res_model': 'partner.category.rel',
'domain': '[("partner_id", "=", %d), ("category_id", "=", %d)]' % (partner_my_category_obj.partner_id, partner_my_category_obj.category_id.id),
'type': 'ir.actions.act_window',
'target': 'new',
'flags': {'tree': {'action_buttons': True},
'form': {'action_buttons': True},}
}
树视图的代码
<record id="partner_category_rel_tree_view" model="ir.ui.view">
<field name="name">partner.category.rel_tree</field>
<field name="model">partner.category.rel</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Categories">
<field name="registration_date" />
</tree>
</field>
</record>
编辑表单视图的代码
<record id="partner_category_rel_edit_form_view" model="ir.ui.view">
<field name="name">partner.category.rel.edit.form</field>
<field name="model">partner.category.rel</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Category" create="false" version="7.0">
<group>
<group col="4">
<field name="registration_date" required="1" />
</group>
</group>
</form>
</field>
</record>
有人能帮帮我吗?
根据你的描述,我认为你的模型设计是错误的。
您想拥有:
[Partner] -->N [Partner Category] -->N [Partner Category Dates]
或者使用更扁平的模型结构:
[Partner] -->N [Partner Category Dates]
在最后一种情况下,您将有一个额外的计算字段 Is latest?
,True
用于每个 Partner/Category 的最后一条记录,否则 False
。在此字段上使用过滤器,您可以获得所需的效果,并且较旧的日期仍然可以存储并可以列出。如果甚至可以考虑使用 active
保留字段来实现该效果。
我刚刚找到了解决办法!!
当我点击按钮关闭、丢弃或保存时出现问题,弹出窗口已关闭,type="one2many" 的函数字段来不及重新加载。
所以我在函数字段中添加了一个选项:
<field name="summary" options="{'reload_on_button': True}">
<tree>
...
</tree>
</field>
选项 reload_on_button 似乎每次单击修改它的按钮时都会重新加载功能字段。
谢谢你的帮助。希望这对任何人都有帮助!
我有树模型:res.partner
、my_category
和 partner_my_category_rel
。合作伙伴和类别之间的关系是 many2many,但我需要在关系 table 中存储一些属性(不仅是 ID,还有注册日期),所以,如您所知,我必须自己创建中间体 table(我将其命名为 partner_my_category_rel
)。因此,在 res.partner
中,我有一个 one2many 字段指向 table partner_my_category_rel
.
现在我想创建一个摘要table。摘要 table 每个类别只能显示一行(这一行将是最后注册日期的那一行)。
示例:合作伙伴两次属于 gold 类别(注册日期为 19/09/08 和 31/12/09) 和 silver 类别一次(注册日期 20/04/13)。摘要 table 必须只显示两行,每行 gold,每行 silver (31/12/09 和 2013 年 4 月 ).
但我在每行添加了一个按钮 打开历史记录,以查看每个类别的所有记录,所以如果我在类别 的行中单击此按钮gold,将打开一个弹出窗口,我将能够在树视图中看到类别 gold 的两条记录。
完成(函数字段类型="one2many")。但它们必须是 editable。现在我的问题出现了。如果我开始编辑记录,即使我不保存更改,当我关闭表单时,没问题,但在这样做之后,如果我切换到其他合作伙伴并重复相同的过程,我会得到 JavaScript 关闭表单时出错:
未捕获类型错误:无法读取未定义的 属性'get'
我尝试了两种方法(在历史的树视图中添加 属性 editable="bottom"
,并创建一个表单以便能够通过单击它们来编辑历史记录)。两种情况都出现 JS 错误。
我不明白为什么(这不是关于特定记录的,因为我第一次打开的伙伴并不重要,它不会引发错误,但我以后打开的其他人都会).
带有编辑表单的案例
按钮代码打开历史记录
def open_history(self, cr, uid, ids, context=None):
""" Utility method used to add an "Open History" button in partner views """
partner_my_category_obj = self.browse(cr, uid, ids[0], context=context)
data_obj = self.pool.get('ir.model.data')
form_data_id = data_obj.get_object_reference(cr, uid, 'res_partner_extended', 'partner_category_rel_edit_form_view')
tree_data_id = data_obj.get_object_reference(cr, uid, 'res_partner_extended', 'partner_category_rel_tree_view')
form_view_id = form_data_id and form_data_id[1] or False
tree_view_id = tree_data_id and tree_data_id[1] or False
return {
'name': _('History of "%s"') % partner_my_category_obj.category_id.name,
'view_type': 'form',
'view_mode': 'form',
'view_id': False,
'views': [(tree_view_id, 'tree'), (form_view_id, 'form'),],
'res_model': 'partner.category.rel',
'domain': '[("partner_id", "=", %d), ("category_id", "=", %d)]' % (partner_my_category_obj.partner_id, partner_my_category_obj.category_id.id),
'type': 'ir.actions.act_window',
'target': 'new',
'flags': {'tree': {'action_buttons': True},
'form': {'action_buttons': True},}
}
树视图的代码
<record id="partner_category_rel_tree_view" model="ir.ui.view">
<field name="name">partner.category.rel_tree</field>
<field name="model">partner.category.rel</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Categories">
<field name="registration_date" />
</tree>
</field>
</record>
编辑表单视图的代码
<record id="partner_category_rel_edit_form_view" model="ir.ui.view">
<field name="name">partner.category.rel.edit.form</field>
<field name="model">partner.category.rel</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Category" create="false" version="7.0">
<group>
<group col="4">
<field name="registration_date" required="1" />
</group>
</group>
</form>
</field>
</record>
有人能帮帮我吗?
根据你的描述,我认为你的模型设计是错误的。
您想拥有:
[Partner] -->N [Partner Category] -->N [Partner Category Dates]
或者使用更扁平的模型结构:
[Partner] -->N [Partner Category Dates]
在最后一种情况下,您将有一个额外的计算字段 Is latest?
,True
用于每个 Partner/Category 的最后一条记录,否则 False
。在此字段上使用过滤器,您可以获得所需的效果,并且较旧的日期仍然可以存储并可以列出。如果甚至可以考虑使用 active
保留字段来实现该效果。
我刚刚找到了解决办法!!
当我点击按钮关闭、丢弃或保存时出现问题,弹出窗口已关闭,type="one2many" 的函数字段来不及重新加载。
所以我在函数字段中添加了一个选项:
<field name="summary" options="{'reload_on_button': True}">
<tree>
...
</tree>
</field>
选项 reload_on_button 似乎每次单击修改它的按钮时都会重新加载功能字段。
谢谢你的帮助。希望这对任何人都有帮助!