目 录CONTENT

文章目录

五、后台数据操作及接口开发

胡彬
2024-08-07 / 0 评论 / 1 点赞 / 1,634 阅读 / 656 字

引言

课前准备

  1. 学员准备:能访问互联网的电脑,可安装应用程序
  2. 教学材料:课件、讲义、案例、视频等教学材料,后续更新至该链接
  3. 课题纪律:培训签到及随堂作业完成情况,工作群通报

预期成果

1、后端数据处理
2、系统间接口
3、了解Odoo代码开发规范

课程

1、后台CRUD数据修改

self.env('demo.model').create({})
self.env('demo.model').write({})
self.env('demo.model').browse({})

    @api.onchange('value')
    def _onchange_value(self):
        for record in self:
            record.value3 = float(record.value) / 100

    @api.depends('value')
    def _value_pc(self):
        for record in self:
            record.value2 = float(record.value) / 100
    
    def set_value3(self):
        for record in self:
            total_employee = self.env['demo.employee'].search([('department_id', '=', record.department_id.id)])
            total_employee.write({'value3': len(total_employee)})
            self.env['demo.employee'].create({
                'name': '新员工',
                'department_id': record.department_id.id,
                'value': 333,
            })
            record.value3 = len(total_employee)

    def delete_employee(self):

        employee = self.env['demo.employee'].search([('value', '=', 333)])
        if employee:
            employee.unlink()
        else:
            raise UserError("没有找到员工")

2、接口

定义controller.py

# -*- coding: utf-8 -*-
from odoo import http
import json


def success_response(data):
    res = {
        "jsonrpc": "2.0",
        "id": None,
        "result": data
    }
    return http.Response(
        json.dumps(res),
        status=200,
        mimetype='application/json'
    )


class Demo(http.Controller):
    @http.route('/demo/employee', auth='public')
    def index(self, **kw):
        return "Hello, world"

    @http.route('/demo/employee/objects', auth='public')
    def list(self, **kw):
        employee_list = []
        for employee in http.request.env['demo.employee'].search([]):
            employee_list.append({
                'id': employee.id,
                'code': employee.code,
                'name': employee.name,
                'value': employee.value,
                'value2': employee.value2,
                'value3': employee.value3
            })
        return success_response(employee_list)

    @http.route('/demo/employee/objects/<model("demo.employee"):obj>', auth='public')
    def object(self, obj, **kw):
        return http.request.render('demo.employee_object', {
            'object': obj
        })

    @http.route('/demo/employee/objects', auth='public')
    def list(self, **kw):
        return http.request.render('demo.employee_list', {
            'root': '/demo/employee',
            'objects': http.request.env['demo.employee'].search([]),
        })

addons_local/demo/views/templates.xml

<odoo>
    <data>

        <template id="employee_list">
          <ul>
            <li t-foreach="objects" t-as="object">
              <a t-attf-href="#{ root }/objects/#{ object.id }">
                <t t-esc="object.display_name"/>
              </a>
            </li>
          </ul>
        </template>
        <template id="employee_object">
          <h1><t t-esc="object.display_name"/></h1>
          <dl>
            <t t-foreach="object._fields" t-as="field">
              <dt><t t-esc="field"/></dt>
              <dd><t t-esc="object[field]"/></dd>
            </t>
          </dl>
        </template>

    </data>
</odoo>


1

评论区