ODOO通过JS写入模型的两种方法

问题来源

ODOO在Qweb中是可以使用JQuery的,所以可以通过前端异步请求后端方法来使用。

AJAX方法

既然可以使用JQuery,那就可以用$.ajax()方法来请求Controller里的方法,后端控制器的例子如下:

class Controller(http.Controller):
        @http.route("/model/add",type='http',auth="public",website=True)
    def add(self,**kw):
        model= http.request.env['base.model']
        text = '已添加成功'
        try:
            record = model.search([('no','=',kw.get('no'))])
            if not record.exists():
                model.sudo().create(kw)
            else:
                text = '数据库已存在该编号,请修改编号'
            except Exception:
                text = '有错误发生'

这里有注意的几个点:

  • 需要http.route装饰器来指定访问路径
  • http.request.env[]来拿到模型
  • 模型的create方法来写入数据

然后就可以通过ajax来请求了。

ODOO自带的异步方法

其实ODOO还自带了请求方法,节省了写控制器的时间,大家可以理解为前端通过获取模型来调用后端模型里的方法,后端模型的例子如下:

@api.model
    def model_add(self, **kwargs):
        text = '已添加成功'
        try:
            if not self.search([('no','=',kwargs.get('no'))],limit=1).exists():
                self.create(kwargs)
            else:
                text = '数据库已存在该编号,请修改编号'
        except Exception:
            text = '有错误发生'
           return text

这里注意几点:

  • 要注意新版api装饰器
  • 直接使用self就可以操作模型了

前端方法:

var Model = require('web.Model');
...
var model = new Model("base.model");
model.call("model_add",{}).then(function(result) {
               ...          
});

这里注意几点:

  • 需要依赖于"web.Model"的js
  • 通过call方法直接请求模型后端方法,第一个参数为方法名,第二个参数为要传入的参数

补充:ODOO11的修改

11.0后,已不存在web.Model模块,所以需要使用RPC,使用方法如下:

var rpc = require('web.rpc');
rpc.query({model: modelName, method: 'fields_get',args: [keys]}))
        .then(function(data) {
        // 代码
        }):
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值