我在我的视图中创建了一个按钮,当我点击它时,我不知道如何打开一个表单(文本框和2按钮取消和确定),因为我需要在文本框中输入数字时间调用复制功能来复制对象
`<record id="immo_personne_form" model="ir.ui.view">
<field name="name">immo.personne.form</field>
<field name="model">immo.personne</field>
<field name="arch" type="xml">
<form string="personne" >
<button string="Copy" type="object" name="copy_data"/>
<field name="Pid_ftravail" />
<field name="id_localisation" />
<newline/>
<field name="matricule" />
<newline/>
<field name="name" />
<field name="prenom" />
<field name="fonction" />
</form>
</field>
</record>`
<record id="immo_personne_tree" model="ir.ui.view">
<field name="name">immo.personne.tree</field>
<field name="model">immo.personne</field>
<field name="arch" type="xml">
<tree string="personnes">
<field name="Pid_ftravail" />
<field name="id_localisation" />
<field name="matricule" />
<field name="name" />
<field name="prenom" />
<field name="fonction" />
</tree>
</field>
</record>
<record id="immo_personne_form_act" model="ir.actions.act_window">
<field name="name">Personne</field>
<field name="res_model">immo.personne</field>
<field name="view_mode">tree,form</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_id" ref="immo_personne_tree"/>
<field name="help" type="html">
</field>
</record>
这是我的班级和我的函数copy_data
class immo_personne(osv.osv):
_name = "immo.personne"
_description = "personne"
def copy_data(self, cr, uid, id, default=None, context=None):
if default is None:
default = {}
res = 1
idea = self.browse(cr, uid, id)
res += int(idea.matricule)
default['matricule'] = res
return super(immo_personne, self).copy_data(
cr, uid, id, default, context)
_columns = {
'matricule':fields.integer('Matricule',size=255,required=True),
'name':fields.char('Nom',size=255),
'prenom':fields.char('Prenom',size=255),
'fonction':fields.many2one('immo.fonction', 'Fonction'),
'Pid_ftravail' : fields.many2one('immo.ftravail' ,'Formation de travail'),
'id_localisation':fields.many2one('immo.localisation','Localisation',domain=" [('id_ftravail','=',Pid_ftravail)]"),
}
immo_personne()
我只想知道如何使用文本框和按钮打开新表单,任何人都知道该怎么做?
答案 0 :(得分:1)
要在按钮上单击打开新表单,您可以将按钮类型更改为action
,并在按钮名称上显示action_id
。这是示例
<record id="model_action_id" model="ir.actions.act_window">
<field name="name">Personne</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">immo.personne</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<button string="%(model_action_id)d" type="action" name="copy"/>
如果您不想更改按钮类型,则按钮方法应返回操作。例如
def copy(self, cr, uid, ids, context):
'''
your code
'''
return {
'name': _("personne"),
'view_mode': 'form,tree',
'view_type': 'form',
'res_model': 'immo.personne',
'type': 'ir.actions.act_window',
'nodestroy': True,
'target': 'new',
'context': context,
}
这有助于您了解按钮操作。
答案 1 :(得分:0)
OpenERP中的表单由act_window
类型的操作打开。在您的情况下,您必须在对象copy(...)
中创建一个方法immo.personne
,它返回此类操作(以字典的形式)。
假设您的新表单带有文本框和两个按钮,称为view_copy_multiple
。试试这段代码:
def copy(self, cr, uid, ids, context=None):
if not ids: return False
if context is None: context = {}
model_data_pool = self.pool.get('ir.model.data')
view = model_data_pool.get_object(cr, uid,
'immo_personne',
'view_copy_multiple',
context=context)
return {
'name': _("Copy multiple records"),
'view_mode': 'form',
'view_id': [view.id],
'view_type': 'form',
'res_model': 'immo.personne',
'type': 'ir.actions.act_window',
'nodestroy': True,
'target': 'new',
'context': context,
'res_id': ids,
}