修复bug
1.UnboundLocalError: local variable 'code' referenced before assignment
根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那么python就在全局变量中找这个变量,找不到抛Unbound-LocalError
要先声明变量
1.内部函数,不修改全局变量可以访问全局变量
2.内部函数,修改同名全局变量,则python会认为它是一个局部变量
3.在内部函数修改同名全局变量之前调用变量名称,则引发Unbound-LocalError
2.TypeError: not all arguments converted during string formatting
TypeError:不是在字符串格式化期间转换的所有参数
在打印日志的时候,传入了多个参数,改为一个即可
_logger.info(vals)
3.TypeError: Model 'report.account_print_ext.report_test_print' does not exist in registry.
“report.account_print_ext TypeError:模型。report_test_print'在注册表中不存在。
class ReportPrintTest(models.AbstractModel):
_name = 'report.account_print_ext.report_test_print'
# _inherit = 'report.account_print_ext.report_test_print'
@api.model
def render_html(self):
report_obj = self.env['report']
# report = report_obj._get_report_from_name('account_print_ext.report_test_print')
res = report_obj.render('account_print_ext.report_test_print')
return res
将原来继承模型注释,就不报错了
4.render_html() takes exactly 1 argument (3 given)
render_html()只接受一个参数(给定3)
选中凭证的时候还会传凭证的id值,还有data
class ReportPrintTest(models.AbstractModel):
_name = 'report.account_print_ext.report_test_print'
@api.model
def render_html(self, docids, data=None):
report_obj = self.env['report']
report = report_obj._get_report_from_name('account_print_ext.report_test_print')
docs = self.env[report.model].sudo().browse(docids)
docargs = {
'docs': docs,
}
res = report_obj.render('account_print_ext.report_test_print', docargs)
return res
odoo源码中的例子
@api.model
def render_html(self, docids, data=None):
Report = self.env['report']
report = Report._get_report_from_name('account_test.report_accounttest')
records = self.env['accounting.assert.test'].browse(self.ids)
docargs = {
'doc_ids': self._ids,
'doc_model': report.model,
'docs': records,
'data': data,
'execute_code': self.execute_code,
'datetime': datetime
}
return Report.render('account_test.report_accounttest', docargs)
5.Please commit your changes or stash them before you switch branches.
(1)git stash
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
(2)放弃本地修改
git reset --hard
git pull
(3)清除文件
git clean -f
6.错误的报表引用该报表不能被载入到数据库: account_print_ext.account_report。
没有在mainfest.py文件中引用文件
7.Updates were rejected because the tip of your current branch is behind
有如下几种解决方法:
1.使用强制push的方法:
git push -u origin master -f
这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。
2.push前先将远程repository修改pull下来
git pull origin master
git push -u origin master
3.若不想merge远程和本地修改,可以先创建新的分支:
git branch [name]
#然后push
git push -u origin [name]
8.UnicodeEncodeError: 'latin-1' codec can't encode characters in position 21-2
没有编码
values (%s)% (x.encode('utf-8'))
9.提示外部ID找不到
排查顺序:
1.id在视图中的加载顺序问题。 可能是:manifest.py文件,view文件先后加载顺序有问题;也可能是:xml 视图文件中,被引用的id出现在了引用id的下方(注意:odoo服务启动后,页面的加载顺序是从上到下)。
- 上次的代码中的id已经注册进了系统,这个时候解决方式,可以通过前台开发者模式,找到相应的引用视图ID,把它注释掉,再次升级。
- 外部Id 相互引用 陷入相互引用,导致ID相互依赖,解决方式:方式1 单独扩展视图,扩展相互引用的视图;方式2 先将相互引用代码删除(注释不管用),安装完成,然后再还原代码,重启服务,升级模块。