zoukankan      html  css  js  c++  java
  • odoo 中 ORM操作

    文章转载自:https://www.cnblogs.com/bianjing/p/9301067.html

    1、查询操作
      sale_id = self.env['sale.order'].search([])
      env将对象实例化,search进行搜索,可以根据需求添加搜索条件
      search_count([]) 查询数量
    2、创建操作
      values 中放的是res.car中之前创建好的字段,点击按钮时会执行orm_test含函数执行自动创建
      @api.multi
      def orm_test(self):
      values = {
      "name": "car",
      "sex":'nan',
      }
      self.env["res.car"].create(values)
    3、修改操作
      1.先search查找要修改的内容
        object = self.env["res.car"].search(["name" "=" "car"])
      2.建立修改的字典值
        values = {
        "name": "car1",
        "sex":'nv',
        }
      3.进行修改操作
        object.write(values)
    4、浏览操作 browse()
      obj = self.env['res.partner'].browse([])
      browse([])的条件为一个的时候可以不用放入列表中
      返回的obj是一个字符集,可以用for遍历,所有的属性都可以用 “遍历值.属性名”进行浏览
      for o in obj:
        print o.name,o.company
    5、创建操作,对create函数的重写,
      前端订单点击保存之后会自动执行create内容,如果我们需要对点击之后进行相应的其他数据的同步刷新操作要对create进行重写操作
      可以用于实现自动订单编号的生成,
      @api.model
      def create(self, vals):
        vals['list_price'] = 100
        print vals
      注:vals中包含了前端订单中的说有字段信息及值,可以用vals['list_price'] = 100的方式进行修改
      自动生成订单编号
        1.定义code字段
        2.在create函数中判断code字段的初始值,并修改vals["code"]的值
        @api.model
        def create(self, vals):
          if vals.get("code", "new") == "new":
            vals["code"] = self.env["ir.sequence"].next_by_code(self._name) or "new"
          result = super(Res.Car, self).create(vals)
          return result
      3.创建一个squence.xml文件
        <record id='seq_res_car' model="ir.sequence">
        <field name=""></field>
        <field name="code">res.car</field>
        <field name="prefix">C%(year)s%(month)s%(day)s</field>
        <field name="padding">5</field>
        <field name="auto_reset">True</field>
        <field name="company+id" eval="False"></field>
        </record>
    6、修改操作,重写write函数
      只触发被修改的控件,只有有控件陪修改的时候,才会触发write函数执行
      示例代码,判断values中是否有qty 键,在进行相应的操作
      @api.multi
      def write(self, values):
        if valuees.has_key("qty"):
          if values["qty"] == 100:
            values["list_price"] = 10
        result = super(Res.Car, self).write(vals)
        return result
    7、删除操作,
      示例代码:self值得是当前所在的类,可以获取当前页面的所有的对象
      @api.multi
      def unlink(self):
        for order in self:
          if order.state != "draft":
            raise UserError(u"只能删除草稿状态")
        result = super(Res.Car, self).unlink()
        return result

  • 相关阅读:
    葵花宝典,参考学习网站收藏
    安卓工具
    马帮
    C89:vs输出调试信息
    OSG:中级篇 拖拽器类
    OSG:幼儿园篇 第六章 碰撞检测类
    OSG:幼儿园篇 第三章 节点坐标变换类
    OSG:幼儿园篇 第五章 界面交互类
    C++11:智能指针
    OSG:幼儿园篇 第四章 节点回调类
  • 原文地址:https://www.cnblogs.com/da-tong/p/11753813.html
Copyright © 2011-2022 走看看