跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 新手求助
  4. 单击一个按钮弹出一个form表单,怎么不刷新原表单?

单击一个按钮弹出一个form表单,怎么不刷新原表单?

已定时 已固定 已锁定 已移动 Odoo 新手求助
14 帖子 4 发布者 10.7k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • W 离线
    W 离线
    winbo
    发表于 最后由 编辑
    #2

    我在按钮的事件是返回一个formB表单:
    def draft_force_assign_winbo(self, cr, uid, ids, context=None):
    print '--11111111111------------'
    if context is None:
    context = {}
    """Open the partial picking wizard"""

        dict2 = {
            'view_type': 'form',
            'view_mode': 'form',
            'res_model': 'stock.partial.picking',
            'type': 'ir.actions.act_window',
            'target': 'new',
            'context': context,
            'nodestroy': True,
        }
    
        return dict2
    
    1 条回复 最后回复
    0
    • W 离线
      W 离线
      winbo
      发表于 最后由 编辑
      #3

      已经找到原因,原来这个按钮先执行了默认的create方法,所以才感觉刷新了,怎么让他不要执行create方法呢?

      1 条回复 最后回复
      0
      • 萧 离线
        萧 离线
        萧云飞
        发表于 最后由 编辑
        #4

        我也遇到过类似需求,也发现这个问题,不过odoo框架机制是这样子设置的。我没有找到类似方法,不过我想了下,form表单里面可以自定义html标签,你再插入js,js里面再以json-rpc的方式提交,或者直接调用call方法,或许是一个解决方法。我没有试,你可以试试

        W 1 条回复 最后回复
        0
        • 萧 萧云飞

          我也遇到过类似需求,也发现这个问题,不过odoo框架机制是这样子设置的。我没有找到类似方法,不过我想了下,form表单里面可以自定义html标签,你再插入js,js里面再以json-rpc的方式提交,或者直接调用call方法,或许是一个解决方法。我没有试,你可以试试

          W 离线
          W 离线
          winbo
          发表于 最后由 编辑
          #5

          @萧云飞 我试过用js调用后台方法,但怎么搞都抱错,openerp的js很难理解。我是这样处理的重写了create方法就好了

          萧 2 条回复 最后回复
          0
          • W winbo

            @萧云飞 我试过用js调用后台方法,但怎么搞都抱错,openerp的js很难理解。我是这样处理的重写了create方法就好了

            萧 离线
            萧 离线
            萧云飞
            发表于 最后由 编辑
            #6

            @winbo 👏🏻

            1 条回复 最后回复
            0
            • W winbo

              @萧云飞 我试过用js调用后台方法,但怎么搞都抱错,openerp的js很难理解。我是这样处理的重写了create方法就好了

              萧 离线
              萧 离线
              萧云飞
              发表于 最后由 编辑
              #7

              @winbo 我想问下,你重新了create方法,是在create方法里面直接调用draft_force_assign_winbo()这个方法吗?今天我试了下,不行呢

              1 条回复 最后回复
              0
              • W 离线
                W 离线
                winbo
                发表于 最后由 编辑
                #8

                create 方法里面不需要调用 你自己的方法,他会执行完create 方法继续执行你的这个方法@萧云飞

                萧 1 条回复 最后回复
                0
                • W winbo

                  create 方法里面不需要调用 你自己的方法,他会执行完create 方法继续执行你的这个方法@萧云飞

                  萧 离线
                  萧 离线
                  萧云飞
                  发表于 最后由 编辑
                  #9

                  那它还是会调用create方法,创建实例,然后刷新当前表单的数据的。@winbo, 能看下,你特殊处理的那段代码么?

                  W 1 条回复 最后回复
                  0
                  • 萧 萧云飞

                    那它还是会调用create方法,创建实例,然后刷新当前表单的数据的。@winbo, 能看下,你特殊处理的那段代码么?

                    W 离线
                    W 离线
                    winbo
                    发表于 最后由 编辑
                    #10

                    @萧云飞 def create(self, cr, uid, vals, context=None):
                    print "==============winbo=========create"
                    print vals
                    super(stock_picking_in_winbo, self).write(cr, uid, picking_id, vals, context=context)
                    # self.draft_force_assign_winbo(self, cr, uid,picking_id)

                        return picking_id
                    
                    
                    def draft_force_assign_winbo(self, cr, uid, ids, context=None):
                    
                        if context is None:
                            context = {}
                        stock_obj = self.browse(cr, uid, ids)
                    
                        """Open the partial picking wizard"""
                        context.update({
                            'active_model': self._name,
                            'active_ids': ids,
                            'active_id': len(ids) and ids[0] or False,
                            'ref_id': 13
                        })
                    
                        mod_obj = self.pool.get('ir.model.data')
                        res = mod_obj.get_object_reference(cr, uid, 'starmerx_stock', 'starmerx_stock_partial_picking_form')
                        # raise osv.except_osv(_('无法保存 !'), _('字段值有错误!'))
                        return {
                            'view_type': 'form',
                            'view_mode': 'form',
                            'view_id': [res and res[1] or False],
                            'res_model': 'stock.partial.picking',
                            'type': 'ir.actions.act_window',
                            'target': 'new',
                            'context': context,
                            'nodestroy': True,
                        }
                    

                    我的这个场景可能跟你的不一样,我之前也以为要在create里面调用我的方法,但其实不用

                    萧 1 条回复 最后回复
                    0
                    • JoshuaJ 离线
                      JoshuaJ 离线
                      Joshua
                      管理员
                      发表于 最后由 编辑
                      #11

                      如果你的按钮的类型是object,在点击的时候会调用read方法来刷新你的FormA,如果你的按钮类型是action,则可以不刷新FormA,也能弹出FormB。

                      例如:

                      <button name="%(action_view_sale_advance_payment_inv)d" string="Create Invoice"
                                              type="action" class="btn-primary"
                                              attrs="{'invisible': [('invoice_status', '!=', 'to invoice')]}"/>
                      
                      

                      【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

                      D 萧 2 条回复 最后回复
                      1
                      • JoshuaJ Joshua

                        如果你的按钮的类型是object,在点击的时候会调用read方法来刷新你的FormA,如果你的按钮类型是action,则可以不刷新FormA,也能弹出FormB。

                        例如:

                        <button name="%(action_view_sale_advance_payment_inv)d" string="Create Invoice"
                                                type="action" class="btn-primary"
                                                attrs="{'invisible': [('invoice_status', '!=', 'to invoice')]}"/>
                        
                        
                        D 离线
                        D 离线
                        digitalsatori
                        管理员
                        发表于 最后由 编辑
                        #12

                        @Joshua 👍

                        【上海先安科技】(tony AT openerp.cn)

                        1 条回复 最后回复
                        0
                        • W winbo

                          @萧云飞 def create(self, cr, uid, vals, context=None):
                          print "==============winbo=========create"
                          print vals
                          super(stock_picking_in_winbo, self).write(cr, uid, picking_id, vals, context=context)
                          # self.draft_force_assign_winbo(self, cr, uid,picking_id)

                              return picking_id
                          
                          
                          def draft_force_assign_winbo(self, cr, uid, ids, context=None):
                          
                              if context is None:
                                  context = {}
                              stock_obj = self.browse(cr, uid, ids)
                          
                              """Open the partial picking wizard"""
                              context.update({
                                  'active_model': self._name,
                                  'active_ids': ids,
                                  'active_id': len(ids) and ids[0] or False,
                                  'ref_id': 13
                              })
                          
                              mod_obj = self.pool.get('ir.model.data')
                              res = mod_obj.get_object_reference(cr, uid, 'starmerx_stock', 'starmerx_stock_partial_picking_form')
                              # raise osv.except_osv(_('无法保存 !'), _('字段值有错误!'))
                              return {
                                  'view_type': 'form',
                                  'view_mode': 'form',
                                  'view_id': [res and res[1] or False],
                                  'res_model': 'stock.partial.picking',
                                  'type': 'ir.actions.act_window',
                                  'target': 'new',
                                  'context': context,
                                  'nodestroy': True,
                              }
                          

                          我的这个场景可能跟你的不一样,我之前也以为要在create里面调用我的方法,但其实不用

                          萧 离线
                          萧 离线
                          萧云飞
                          发表于 最后由 编辑
                          #13

                          @winbo 在 单击一个按钮弹出一个form表单,怎么不刷新原表单? 中说:

                          picking

                          谢谢

                          1 条回复 最后回复
                          0
                          • JoshuaJ Joshua

                            如果你的按钮的类型是object,在点击的时候会调用read方法来刷新你的FormA,如果你的按钮类型是action,则可以不刷新FormA,也能弹出FormB。

                            例如:

                            <button name="%(action_view_sale_advance_payment_inv)d" string="Create Invoice"
                                                    type="action" class="btn-primary"
                                                    attrs="{'invisible': [('invoice_status', '!=', 'to invoice')]}"/>
                            
                            
                            萧 离线
                            萧 离线
                            萧云飞
                            发表于 最后由 编辑
                            #14

                            @Joshua 谢谢你的讲解,这个action在某些场景不适用。某些条件成立时,才弹出一个窗口,其它条件就执行另外的代码;或者根据不同的条件,处理不同的数据后,弹出不同的窗口(可以定义多个button,但是attrs条件框处理能力毕竟有限)

                            1 条回复 最后回复
                            0

                            你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

                            厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

                            有了你的建议,这篇帖子会更精彩哦 💗

                            注册 登录
                            回复
                            • 在新帖中回复
                            登录后回复
                            • 从旧到新
                            • 从新到旧
                            • 最多赞同


                            • 登录

                            • 没有帐号? 注册

                            • 登录或注册以进行搜索。
                            • 第一个帖子
                              最后一个帖子
                            0
                            • 版块
                            • 标签
                            • 热门
                            • 用户
                            • 群组