Odoo 中文社区

    • 注册
    • 登录
    • 搜索
    • 版块
    • 标签
    • 热门
    • 用户
    • 群组

    Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

    由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

    本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

    开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

    如果您登录系统碰到问题,请在微信公众号留言:

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

    Odoo 新手求助
    4
    14
    6488
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • W
      winbo 最后由 编辑

      一个表单页面formA 上有个按钮,点击按钮弹出一个formB表单,但是我原来的表单formA好像是刷新了还是怎么了,获取了数据库最新的一条记录出来,怎么回事?我不要刷新原表单formA,怎么处理?
      按钮:
      《button name="draft_force_assign" string="收货" type="object" class="oe_highlight" groups="base.group_user"/》

      1 条回复 最后回复 回复 引用 0
      • W
        winbo 最后由 编辑

        我在按钮的事件是返回一个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
          winbo 最后由 编辑

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

          1 条回复 最后回复 回复 引用 0
          • 萧
            萧云飞 最后由 编辑

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

            W 1 条回复 最后回复 回复 引用 0
            • W
              winbo @萧云飞 最后由 编辑

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

              萧 2 条回复 最后回复 回复 引用 0
              • 萧
                萧云飞 @winbo 最后由 编辑

                @winbo 👏🏻

                1 条回复 最后回复 回复 引用 0
                • 萧
                  萧云飞 @winbo 最后由 编辑

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

                  1 条回复 最后回复 回复 引用 0
                  • W
                    winbo 最后由 编辑

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

                    萧 1 条回复 最后回复 回复 引用 0
                    • 萧
                      萧云飞 @winbo 最后由 编辑

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

                      W 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里面调用我的方法,但其实不用

                        萧 1 条回复 最后回复 回复 引用 0
                        • Joshua
                          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')]}"/>
                          
                          

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

                          digitalsatori 萧 2 条回复 最后回复 回复 引用 1
                          • digitalsatori
                            digitalsatori 管理员 @Joshua 最后由 编辑

                            @Joshua 👍

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

                            1 条回复 最后回复 回复 引用 0
                            • 萧
                              萧云飞 @winbo 最后由 编辑

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

                              picking

                              谢谢

                              1 条回复 最后回复 回复 引用 0
                              • 萧
                                萧云飞 @Joshua 最后由 编辑

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

                                1 条回复 最后回复 回复 引用 0
                                • First post
                                  Last post