odoo开发问题总结

1.关于fields.Selection()动态设置selection,选中后页面不显示得问题

model.py
approvalby = fields.Selection(selection = '_get_option', string="审批人", help="字段描述", required=True)
def _get_option(self):
	option_list = []
	form item in range(10):
		option_list += [(item, 'xxxx')]
	.............
	return option_list 
# 上面这种写法,当create以后页面不会显示对应得值
# 我的解决办法,在模型里面再声明一个变量
approvalby = fields.Selection(selection = '_get_option', string="审批人", help="字段描述", required=True)
name = fields.Char()
def _get_option(self):
	option_list = []
	form item in range(10):
		option_list += [(item, 'xxxx')]
	.............
	return option_list 
 # 重点
 @api.model
    def create(self, vals):
    	list = self._get_option
        for item in list:
            if item[0] == vals['approvalby']:
                vals['name'] = item[1]
        return super().create(vals)
# xml文件里面得写法
<group>
   <field name="name" attrs="{'invisible':[('name','=',False)]}"/>
    <field name="approvalby" attrs="{'invisible':[('name','!=',False)]}"/>
</group>

2.自定义from视图

 <record id="mcattendance_form_view_patchcard" model="ir.ui.view">
		<field name="name">mc.applymanage.form</field> <!-- name可以随意定义最好与模型名字关联-->
		<field name="model">mc.applymanage</field><!--模型-->
		<field name="arch" type="xml">
			<form string="新建">
				<sheet>
                  <group>
                          <field name="name" attrs="{'invisible':[('name','=',False)]}"/>
                          <field name="approvalby" attrs="{'invisible':[('name','!=',False)]}"/>
                  </group>
				</sheet>
			</form>
		</field>
	</record>

3.关于record 的id设置

id必须以模型名作为开始否则系统报错
我把问题2中id该成
在这里插入图片描述

4.关于create()、write()、read()的使用

create()新建数据保存到模型之前的操作可以写在这里面

@api.model
    def create(self, vals):
        """vals是form中的字段,在这里面可以重新定义新建要保存的数据"""
        return super().create(vals)

write()编辑保存数据到模型之前的操作可以写在里面

@api.multi
    def write(self, vals):
    	 """数据保存前的操作"""
        return super().write(vals)

read()视图权限操作
odoo有三种视图,tree视图,search视图和form视图,在这里可以结合context对视图进行操作
@api.multi
def read(self, fields=None, load=’_classic_read’):
return super().read(fields=fields, load=load)

5.获取默认值填充到form视图

@api.model
    def default_get(self, fields_list): #打开创建窗口获取默认值fields_list:模型字段
        result = super(leave, self).default_get(fields_list)
       """ 对要填充的数据进行赋值操作"""
        return result

6.申明日期时设置当天时间为默认值

applicationdate = fields.Date(string="申请日期", default=fields.Date.context_today)

7.解决模型循环依赖的问题

把几个模块公共需要的模型提出来新建一个模块来放置,然后在需要使用的模型中使用
_inherit = '需要继承的模型名’来继承这个模型的字段

8.“配置权限报错”

8.1、报错提示:constraint 检查错误External ID must be fully qualifiedNone
在字段的标签上需要加上模块名否则报错,但是在menuitem标签上可以只写群组名,

#报错写法
<field name="those_remarks" lang="sub" groups=“群组名"/>

#更正
<field name="those_remarks" lang="sub" groups=“模块名.群组名"/>

9.odoo导航排序问题menuitem

默认情况下menuitem排序和安装顺序有关,有时候我们会发现排序总是在变动如果要固定位置我们需要在标签里面添加sequence属性

<menuitem name="员工" action="" parent="" id="" sequence='1'/>
<menuitem name="部门" action="" parent="" id="" sequence='2'/>
<menuitem name="配置" parent="" id="" sequence='3'/>

在这里插入图片描述

10.模型翻译

  1. 首先在模型根目录创建名为i18的文件夹
  2. 在系统中点击设置,激活开发者模式, 在设置里面点击加载翻译,弹窗选择要翻译的语言,点击加载
  3. 加载完毕,我们找到导入导出,点击导出翻译,弹框中,语言选择需要的语言,文件格式选择po,应用是你要翻译的模块名,最后点击导出
    在这里插入图片描述
  4. 导出后会有一个弹框,点击zh_CN.po,下载该文件,放到最开始创建的i18文件里面,最后更新升级模块,完毕~
    在这里插入图片描述

11.以模型为判断条件,显示自定义按钮

<?xml version="1.0" encoding="UTF-8"?>
<templates id="template_02" xml:space="preserve">
    <t t-extend="ListView.buttons">
      <t t-jquery="div.o_list_buttons" t-operation="append">
            <button t-if='widget.modelName == "模型名"' class="btn btn-primary o_button_statistics" type="button">按钮</button>
     </t>
 </t>
</templates>

12.多个模块公用一个顶级菜单

moduleOne和moduleTwo公用一个模块

模块1:moduleOne
view.xml
<menuitem name="模块" id="modules" sequence="1"/>  // 公用顶级菜单
<menuitem name="模块1" id="moduleOne" parent="modules" sequence="1"/>
模块2:moduleTwo
view.xml
<menuitem name="模块2" id="moduleTwo" parent="moduleOne.modules" sequence="2"/>

需要注意的是要用到其他模块菜单id需要简介或者直接的建立模块之间的依赖在__manifest__.py里面配置如:‘depends’: [‘moduleOne’]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值