2016-05-30 66 views
2

我有简单的代码。用创建按钮(odoo)直接打开“one2many窗体视图”

蟒:

class Test(osv.osv): 
    _name= 'test.name' 
    _columns= { 
     'name' = fields.char('Name') 
} 

XML:

<record model="ir.ui.view" id="test_form_view"> 
    <field name="name">Test</field> 
    <field name="model">test.name</field> 
    <field name="type">form</field> 
    <field name="arch" type="xml"> 
     <form version="7.0"> 
      <sheet> 
       <group> 
        <field name="name"/> 
       </group> 
      </sheet> 
     </form> 
    </field> 
</record> 

我想打开窗体视图,相当于点击one2many字段(带按钮save&closesave&newdiscard)后,让我可以点击保存&新按钮,直接添加新条目而不关闭并重新打开新表单。

有没有机会做到这一点? (无需手动创建具有自定义按钮形式)

+0

据我所知,没有内置向导/弹出窗口。但是如果你的模型没有这么多的字段,你可以使用可编辑的树视图。只是题外话:你为什么使用OpenERP/Odoo V7而不是新版本? – CZoellner

+0

@CZoellner这可以帮助多次填充“名称”字段而不关闭和重新打开,但这不是我正在寻找的(我需要用按钮查看...)。不管怎么说,多谢拉。 回答你的问题:使用OpenERP/Odoo V7不是我的选择。 –

回答

0

不幸的是,你不能覆盖ORM方法,如create,使它们调用其他的形式,所以我建议你的是尝试以下方法:

创建一个新的瞬态模型这就好比你 模型test.name,这种方式:

class YourAbstractModel(osv.TransientModel): 
    _name= 'your.abstract.model' 
    _columns= { 
     'name': fields.char('Name') 
    } 

    def create_test_name(self, cr, uid, ids, context): 
     wizard_info = self.browse(cr, uid, ids)[0] 
     vals = { 
      'name': wizard_info.name or False 
     } 
     self.pool.get('test.name').create(cr, uid, vals, context=context) 
     return { 
      'type': 'ir.actions.act_window', 
      'res_model': 'your.abstract.model', 
      'view_mode': 'form', 
      'view_type': 'form', 
      'views': [(False, 'form')], 
      'target': 'new', 
     } 

,也可以创建自己的看法:

<record model="ir.ui.view" id="your_abstract_model_form_view"> 
    <field name="name">Your abstract model form</field> 
    <field name="model">your.abstract.model</field> 
    <field name="type">form</field> 
    <field name="arch" type="xml"> 
     <form version="7.0"> 
      <sheet> 
       <group> 
        <field name="name"/> 
       </group> 
       <footer> 
        <button name="create_test_name" string="Create" type="object" class="oe_highlight"/> or 
        <button special="cancel" string="Cancel" class="oe_link"/> 
       </footer> 
      </sheet> 
     </form> 
    </field> 
</record> 

然后修改显示您在问题中编写的视图的menuitem,并使其调用我在此处编写的新视图。

我想如果我很好地理解了这个问题,你可以管理你的目的。

+0

感谢您的回答。 这种方法工作正常,除非你第一次点击创建按钮? (这就是为什么我想在创建按钮后直接得到那种视图的原因) 另外,我做了一些非常相似的事情,只是定义了返回我想要的视图的方法,但是在同一个类中并用按钮形式调用它们XML。它的工作方式与您所建议的方式非常相似。 那么,制作新的瞬态模型,然后在我的测试模型中写入东西的实际好处是什么? –

+0

我还没有尝试过,我猜你可以在不创建抽象模型的情况下得到相同的结果,如果你打开向导隐藏动作按钮(''flags':{'form':{'action_buttons':False,}, }')并创建你自己的(调用一个非ORM方法,调用一个ORM方法), – forvas