Odoo之树形列表批量更改

该代码段展示了Odoo中一个基础模型类的扩展,主要功能是加载并处理不同类型的视图(如列表、搜索等),同时支持获取当前模型的字段和过滤器。在`load_views`方法中,对树形列表视图的XML结构进行修改,主要是添加或更新`export_xlsx`属性。此外,还提供了`update_arch_result`方法用于解析和转换XML到JSON,再将处理后的JSON转换回XML。
摘要由CSDN通过智能技术生成
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from odoo import models, tools, _, api
import xmltodict
import json


class BaseModel(models.AbstractModel):
    _inherit = 'base'

    @api.model
    def load_views(self, views, options=None):
        """ Returns the fields_views of given views, along with the fields of
            the current model, and optionally its filters for the given action.

        :param views: list of [view_id, view_type]
        :param options['toolbar']: True to include contextual actions when loading fields_views
        :param options['load_filters']: True to return the model's filters
        :param options['action_id']: id of the action to get the filters
        :return: dictionary with fields_views, fields and optionally filters
        """
        options = options or {}
        result = {}
        toolbar = options.get('toolbar')
        result['fields_views'] = {
            v_type: self.fields_view_get(v_id, v_type if v_type != 'list' else 'tree',
                                         toolbar=toolbar if v_type != 'search' else False)
            for [v_id, v_type] in views
        }
        # TEL TODO 树形列表视图批量更改
        xml_str = result.get('fields_views').get('list').get('arch')
        new_xml_str = self.update_arch_result(xml_str)
        result.get('fields_views').get('list').update({'arch': new_xml_str})

        result['fields'] = self.fields_get()
        if options.get('load_filters'):
            result['filters'] = self.env['ir.filters'].get_filters(self._name, options.get('action_id'))
        return result

    def update_arch_result(self, xml_str):
        """
        :param xml_str: str树形视图
        :return: 新的树形视图结构
        """
        # 返回一个OrderedDict类型的对象
        new_dict_obj = xmltodict.parse(xml_str, encoding='UTF-8')
        # 使用内置的json模块转换成json字符串
        json_str = json.dumps(new_dict_obj, ensure_ascii=False)
        # 转换Json格式
        jsons = json.loads(json_str)
        # Json格式
        tree_json = jsons.get('tree')
        export_xlsx_attr = tree_json.get('@export_xlsx', False)
        # 不存在export_xlsx属性则更新
        if not export_xlsx_attr:
            tree_json.update({'@export_xlsx': 0})
        # 将以更改好Json数据重新解析为字符串
        new_xml_str = xmltodict.unparse(jsons)
        # 替换固定表头
        new_xml_str = new_xml_str.replace('<?xml version="1.0" encoding="utf-8"?>', '')
        return new_xml_str

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值