gpt4 book ai didi

python - 如何在 OpenERP 上创建动态 View

转载 作者:太空狗 更新时间:2023-10-30 01:03:38 25 4
gpt4 key购买 nike

我需要帮助来创建动态 View 。让我解释一下:我有 Form1 和 Form2 View 。 Form1 包含expression 字段和extract 按钮。 Form2 包含从 Form1 中提取的表达式元素。例如,当您在 Form1 的表达式字段中输入 (a+b)*c-d*0,5 时,Form2 应该提取并显示:

( - open brace
a - variable
+ - addition
b - variable
) - close brace
* - multiplication
c - variable
- - subtraction
d - variable
* - multiplication
0,5 - constant number

现在,这是我的类(class):

class wz_formula(osv.osv_memory):
"""
Formula Wizard
"""
_name = "wz.formula"
_inherit = "ir.wizard.screen"
_description = "Formula Wizard"

_columns = {
'name': fields.char('Formula name', required=True, size=64)
, 'expression': fields.char('expression', required=True, size=64)
, 'state': fields.selection([('init','init'),('done','done')], 'state', readonly=True)
}

_defaults = {
'state': 'init'
}

def next(self, cr, uid, ids, context=None):
if context is None:
context = {}
formula_obj = self.browse(cr, uid, ids)[0]
formula_name = formula_obj.name
infix = formula_obj.expression
if formula_name and expression:
modobj = self.pool.get('ir.module.module')
mids = modobj.search(cr, uid, [('state', '=', 'installed')])
modobj.update_translations(cr, uid, mids, [formula_name, expression], context or {})
self.write(cr, uid, ids, {'state': 'done'}, context=context)
return {
'name': _('Formula')
, 'view_type': 'form'
, 'view_mode': 'form'
, 'view_id': False
, 'res_model': 'wz.formula'
, 'domain': []
, 'context': dict(context, active_ids=ids)
, 'type': 'ir.actions.act_window'
, 'target': 'new'
, 'res_id': ids and ids[0] or False
}

# create an object
wz_formula()

这是我的 xml:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>

<record id="view_wz_formula" model="ir.ui.view">
<field name="name">Formula</field>
<field name="model">wz.formula</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Formula">
<group colspan="8" col="8" states="init">
<separator string="Formula" colspan="8"/>
<field name="state" invisible="1"/>
<field name="name"/>
<field name="expression" width="220"/>
<button special="cancel" string="Cancel" icon="gtk-cancel" colspan="1"/>
<button name="next" string="Next" type="object" icon="gtk-ok" colspan="1"/>
</group>
<group colspan="8" col="8" states="done">
<separator string="Done" colspan="8"/>
<button special="cancel" string="Close" icon="gtk-cancel"/>
</group>
</form>
</field>
</record>

<record id="action_view_wz_formula" model="ir.actions.act_window">
<field name="name">Formula</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">wz.formula</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>

<menuitem
name="Create a formula"
action="action_view_wz_formula"
id="menu_view_wz_formula"
parent="menu_fs_root" sequence="2"/>

</data>
</openerp>

到目前为止,它只是在 Form1 和 Form2 之间切换。如何提取上面解释的表达式?

最佳答案

要在 openerp v6 中添加动态 View ,重写函数 fields_view_get()

def fields_view_get(self, cr, uid, view_id=None, view_type='form', context={}, toolbar=False):
result = super(<your_class_name>, self).fields_view_get(cr, uid, view_id, view_type, context=context, toolbar=toolbar)
# your modification in the view
# result['fields'] will give you the fields. modify it if needed
# result['arch'] will give you the xml architecture. modify it if needed
return result

result 将是一个字典,主要包含两件事,Xml 架构和字段。在 result['arch'] 中提供 xml 架构作为字符串,在 result['fields'] 中提供字段作为字典的字典。然后返回结果。然后你会根据你在领域和架构中给出的内容得到一个 View 。

关于python - 如何在 OpenERP 上创建动态 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6569828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com