修复bug

2019-04-09  本文已影响0人  葡萄柚子茶

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服务启动后,页面的加载顺序是从上到下)。

  1. 上次的代码中的id已经注册进了系统,这个时候解决方式,可以通过前台开发者模式,找到相应的引用视图ID,把它注释掉,再次升级。
  2. 外部Id 相互引用 陷入相互引用,导致ID相互依赖,解决方式:方式1 单独扩展视图,扩展相互引用的视图;方式2 先将相互引用代码删除(注释不管用),安装完成,然后再还原代码,重启服务,升级模块。
上一篇下一篇

猜你喜欢

热点阅读