修复bug

作者: 葡萄柚子茶 | 来源:发表于2019-04-09 12:59 被阅读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 先将相互引用代码删除(注释不管用),安装完成,然后再还原代码,重启服务,升级模块。

    相关文章

      网友评论

          本文标题:修复bug

          本文链接:https://www.haomeiwen.com/subject/vyhbiqtx.html