点击按钮后如何打开新表格?

时间:2014-04-18 21:39:46

标签: python button openerp

我在我的视图中创建了一个按钮,当我点击它时,我不知道如何打开一个表单(文本框和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() 

我只想知道如何使用文本框和按钮打开新表单,任何人都知道该怎么做?

2 个答案:

答案 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,
       }