在Odoo8中,如何将模块的.py文件导入到自定义模块中?
In Odoo8, how do I import a module's .py file into a custom module?
好的,来了。振作起来。
我正在尝试从 class(res_partner) 位于 Odoo 8 中的模块 (account_followup) 中,通过创建自定义模块 (account_followup_upgrade) 继承了 class 并定义和重新定义了方法。
变化非常小,因为该方法的唯一目的是创建一个 html table 以包含在发送给客户的电子邮件中;我刚刚复制了原始方法并修改了 html 代码部分。
话虽如此,它确实有效,大部分。我的自定义模块文件夹中的文件包括:
__openerp__.py(不是完整文件,只是重要的一点):
'depends': ['account_followup'],
__init__.py:
# -*- coding: utf-8 -*-
import mymodule
mymodule.py:
# -*- coding: utf-8 -*-
from openerp.osv import osv
# I need to modify a method in this class
class res_partner(osv.osv):
# So I inherit it
_inherit = 'res.partner'
# And define a method called the same as the original, with the same arguments
def get_followup_table_html(self, cr, uid, ids, context=None):
"""
Build the html tables to be included in emails send to partners,
when reminding them their overdue invoices.
:param ids: [id] of the partner for whom we are building the tables
:rtype: string
"""
try:
from report import account_followup_print
except ImportError:
return 'import failed'
# The code that follows generates an html table
assert len(ids) == 1
if context is None:
context = {}
partner = self.browse(cr, uid, ids[0], context=context).commercial_partner_id
#copy the context to not change global context. Overwrite it because _() looks for the lang in local variable 'context'.
#Set the language to use = the partner language
context = dict(context, lang=partner.lang)
followup_table = ''
if partner.unreconciled_aml_ids:
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id
current_date = fields.date.context_today(self, cr, uid, context=context)
rml_parse = account_followup_print.report_rappel(cr, uid, "followup_rml_parser")
final_res = rml_parse._lines_get_with_partner(partner, company.id)
for currency_dict in final_res:
currency = currency_dict.get('line', [{'currency_id': company.currency_id}])[0]['currency_id']
# My changes start here
followup_table += '''
<table border="0" width=100%>
<tr style="background-color:#ea6153;color:White">
<td><b>''' + _("Invoice Date") + '''</b></td>
<td><b>''' + _("Description") + '''</b></td>
<td><b>''' + _("Due Date") + '''</b></td>
<td><b>''' + _("Amount") + " (%s)" % (currency.symbol) + '''</b></td>
</tr>
'''
total = 0
strbegin = "<TD>"
strend = "</TD>"
empty_cell = strbegin + strend
for aml in currency_dict['line']:
date = aml['date_maturity'] or aml['date']
if date <= current_date and aml['balance'] > 0:
total += aml['balance']
followup_table +="<TR>" + strbegin + str(aml['date']) + strend + strbegin + aml['name'] + strend + strbegin + str(date) + strend + strbegin + '{0:.2f}'.format(aml['balance']) + strend + "</TR>"
#total = reduce(lambda x, y: x+y['balance'], currency_dict['line'], 0.00)
followup_table +='''<TR style="background-color:#e9e9e9">''' + empty_cell + empty_cell + strbegin +"<B>TOTAL</B>" + strend + strbegin + "<B>" + '{0:.2f}'.format(total) + "</B>" + strend + "</TR>"
followup_table +="</table>"
return followup_table
现在,我知道模块正在工作,因为我在我的电子邮件中收到 'import error',它实际上覆盖了原始方法(否则我会得到一个工作,如果丑陋,html table).问题是导入:
from report import account_followup_print
此文件 account_followup_print.py 位于 report 文件夹内,原始 account_followup 模块,我不知道如何导入它(或继承它)。我需要它,因为它在 html table 代期间被称为 一次...
如何从我的自定义模块中引用此文件?
我知道这是一堵文字墙,感谢您的阅读!
要导入它,请使用完整路径
from openerp.addons.account_followup.report import account_followup_print
我认为这会起作用,但如果不稍微改变一下它就会起作用
您需要指定模型报告的完整路径
也看看这个问题:
好的,来了。振作起来。
我正在尝试从 class(res_partner) 位于 Odoo 8 中的模块 (account_followup) 中,通过创建自定义模块 (account_followup_upgrade) 继承了 class 并定义和重新定义了方法。
变化非常小,因为该方法的唯一目的是创建一个 html table 以包含在发送给客户的电子邮件中;我刚刚复制了原始方法并修改了 html 代码部分。
话虽如此,它确实有效,大部分。我的自定义模块文件夹中的文件包括:
__openerp__.py(不是完整文件,只是重要的一点):
'depends': ['account_followup'],
__init__.py:
# -*- coding: utf-8 -*-
import mymodule
mymodule.py:
# -*- coding: utf-8 -*-
from openerp.osv import osv
# I need to modify a method in this class
class res_partner(osv.osv):
# So I inherit it
_inherit = 'res.partner'
# And define a method called the same as the original, with the same arguments
def get_followup_table_html(self, cr, uid, ids, context=None):
"""
Build the html tables to be included in emails send to partners,
when reminding them their overdue invoices.
:param ids: [id] of the partner for whom we are building the tables
:rtype: string
"""
try:
from report import account_followup_print
except ImportError:
return 'import failed'
# The code that follows generates an html table
assert len(ids) == 1
if context is None:
context = {}
partner = self.browse(cr, uid, ids[0], context=context).commercial_partner_id
#copy the context to not change global context. Overwrite it because _() looks for the lang in local variable 'context'.
#Set the language to use = the partner language
context = dict(context, lang=partner.lang)
followup_table = ''
if partner.unreconciled_aml_ids:
company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id
current_date = fields.date.context_today(self, cr, uid, context=context)
rml_parse = account_followup_print.report_rappel(cr, uid, "followup_rml_parser")
final_res = rml_parse._lines_get_with_partner(partner, company.id)
for currency_dict in final_res:
currency = currency_dict.get('line', [{'currency_id': company.currency_id}])[0]['currency_id']
# My changes start here
followup_table += '''
<table border="0" width=100%>
<tr style="background-color:#ea6153;color:White">
<td><b>''' + _("Invoice Date") + '''</b></td>
<td><b>''' + _("Description") + '''</b></td>
<td><b>''' + _("Due Date") + '''</b></td>
<td><b>''' + _("Amount") + " (%s)" % (currency.symbol) + '''</b></td>
</tr>
'''
total = 0
strbegin = "<TD>"
strend = "</TD>"
empty_cell = strbegin + strend
for aml in currency_dict['line']:
date = aml['date_maturity'] or aml['date']
if date <= current_date and aml['balance'] > 0:
total += aml['balance']
followup_table +="<TR>" + strbegin + str(aml['date']) + strend + strbegin + aml['name'] + strend + strbegin + str(date) + strend + strbegin + '{0:.2f}'.format(aml['balance']) + strend + "</TR>"
#total = reduce(lambda x, y: x+y['balance'], currency_dict['line'], 0.00)
followup_table +='''<TR style="background-color:#e9e9e9">''' + empty_cell + empty_cell + strbegin +"<B>TOTAL</B>" + strend + strbegin + "<B>" + '{0:.2f}'.format(total) + "</B>" + strend + "</TR>"
followup_table +="</table>"
return followup_table
现在,我知道模块正在工作,因为我在我的电子邮件中收到 'import error',它实际上覆盖了原始方法(否则我会得到一个工作,如果丑陋,html table).问题是导入:
from report import account_followup_print
此文件 account_followup_print.py 位于 report 文件夹内,原始 account_followup 模块,我不知道如何导入它(或继承它)。我需要它,因为它在 html table 代期间被称为 一次...
如何从我的自定义模块中引用此文件?
我知道这是一堵文字墙,感谢您的阅读!
要导入它,请使用完整路径
from openerp.addons.account_followup.report import account_followup_print
我认为这会起作用,但如果不稍微改变一下它就会起作用 您需要指定模型报告的完整路径 也看看这个问题: