odoo中根据模型生成viwe视图的框架代码

本文介绍了一个用于Odoo平台的自定义框架,该框架能够根据模型自动生成XML视图,包括表单视图、树形视图及搜索视图等,以此来提高开发效率并减少错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作一段时间了,由于后台是odoo,而odoo得view视图根据model中定义的类型进行生成,由于每次都要重复写很多东西,而且还容易出错,因此我写了一个根据model生成view视图的框架,生成好后,根据模型中定义的fields再填充数据进去,提高了一点效率。

#coding=utf-8

import re
import os

tmp_head_view = """<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>"""

tmp_form_head = """        <record id="{}" model="ir.ui.view">
            <field name="name">{}</field>
            <field name="model">{}</field>
            <field name="arch" type="xml">
                <form string="{}">
                    <group>"""

tmp_field_view ="""                        <field name="{}" />"""

tmp_form_last="""                    </group>
                </form>
            </field>
        </record>"""

tmp_tree_head = """        <record id="{}" model="ir.ui.view">
            <field name="name">{}</field>
            <field name="model">{}</field>
            <field name="type">tree</field>
            <field name="arch" type="xml">
                <tree string="{}" >"""

tmp_tree_last = """                </tree>
            </field>
        </record>"""

tmp_search_head = """        <record id="{}" model="ir.ui.view">
            <field name="name">{}</field>
            <field name="model">{}</field>
            <field name="arch" type="xml">
                <search string="Search Payslips">"""

tmp_search_last = """                </search>
            </field>
        </record>"""

tmp_act_view = """        <record id="{}" model="ir.actions.act_window">
            <field name="name">{}</field>
            <field name="res_model">{}</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form</field>
            <field name="view_id" ref="{}"/>
            <field name="search_view_id" ref="{}"/>
        </record>"""

tmp_menu_view = """        <menuitem id="{}" name="{}" sequence="10" action="{}" parent="{}"/>"""

tmp_last_view = """    </data>
</openerp>"""



name_re = re.compile(r"\'([^\']*)\'")
name_line_re = re.compile(r"    _name")
field_re = re.compile(r"fields\.")

def write_view_from_file(file_name,target_file):
    fwrite = open(target_file, 'w')
    fwrite.write(tmp_head_view)
    fwrite.write("\n")
    fwrite.close()

    if os.path.exists(file_name):
        if os.path.isfile(file_name):
            write_view_config(file_name,target_file)




def write_view_config(file_name,target_file):
    fwrite = open(target_file, 'a')
    with open(file_name, 'r') as f:
        line = 0
        line_list = []
        for line in f.readlines():
            if name_line_re.findall(line):
                print line
                names = name_re.findall(line.strip())
                name = names[0]
                name_normal = name.replace('.','_')
                name_form_id = name_normal+"_form"
                name_tree_id = name_normal+"_tree"
                name_filter_id = name_normal+"_filter"
                name_act_id = "act_"+name_normal
                name_menu_id = "menu_"+name_normal
                fwrite.write(tmp_form_head.format(name_form_id,name_form_id,name,name_form_id))
                fwrite.write("\n")
                fwrite.write(tmp_form_last)
                fwrite.write("\n")
                fwrite.write("\n")

                fwrite.write(tmp_tree_head.format(name_tree_id,name_tree_id,name,name_tree_id))
                fwrite.write("\n")
                fwrite.write(tmp_tree_last)
                fwrite.write("\n")
                fwrite.write("\n")

                fwrite.write(tmp_search_head.format(name_filter_id,name_filter_id,name))
                fwrite.write("\n")
                fwrite.write(tmp_search_last)
                fwrite.write("\n")
                fwrite.write("\n")

                fwrite.write(tmp_act_view.format(name_act_id," ",name,name_tree_id,name_filter_id))
                fwrite.write("\n")
                fwrite.write("\n")

                fwrite.write(tmp_menu_view.format(name_menu_id," ",name_act_id," "))
                fwrite.write("\n")
                fwrite.write("\n")
    fwrite.write(tmp_last_view)
    fwrite.close()




    fwrite.close()

if __name__ =='__main__':

    file_names = [
        'model_config.py'       #写入模型文件名,可以绝对路径和相对路径
    ]
    for file_name in file_names:
        if file_name.find(".py")>0:
            new_file_name = file_name.split(".")[0]+"_view_tmp.xml"
            write_view_from_file(file_name,new_file_name)
        else:
            print "file: {} is not a valid file".format(file_name)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值