我正在尝试创建一个函数字段,它将获取成员的当前成员类型,并将其存储在res.partner中的新字段中。但是,每当我创建或编辑成员的成员身份时,都不会调用此代码。但是,如果我删除store属性,函数字段就会按预期工作。请注意,我现在重用了openerp的成员模块并使用了odoo8。我附上了代码,请让我知道我哪里错了。至少当我使用store属性时,我需要调用这个方法。我是否错误地使用了store属性:
from openerp.osv import osv, fields
class partner_member(osv.Model):
'''Partner'''
_inherit = 'res.partner'
def _get_membership_type(self,cr,uid,ids,context=None):
member_line_obj = self.pool.get('membership.membership_line')
partner_list = []
for line in member_line_obj.browse(cr, uid, ids, context=context):
if line.state == 'paid':
partner_list.append(line.partner.id)
return partner_list
def _current_membership(self, cr, uid, ids, field_name= None, arg=False, context=None):
res_obj = self.pool.get('res.partner')
res_data_obj = res_obj.browse(cr, uid, ids, context=context)
res=dict()
for member in res_data_obj:
if member.member_lines:
for lines in member.member_lines:
if (lines.state == 'paid'):
res[member.id] = lines.membership_id.name_template
break
else:
res[member.id] = 'None'
else:
res[member.id] = 'None'
return res
_columns = {
'current_membership':
fields.function(_current_membership,type='char',
string='Current Membership Type',
store = {
'membership.membership_line':
(_get_membership_type, ['state'], 10)
},
help="Shows the current membership of a user"),
}发布于 2014-09-26 20:42:37
您在_get_membership_type()方法上犯了一个错误。实际上,您只返回与状态==‘res.partner’一致的支付列表。
我认为,无论行的状态如何,都必须返回行中的所有合作伙伴。
def _get_membership_type(self,cr,uid,ids,context=None):
member_line_obj = self.pool.get('membership.membership_line')
partner_list = []
for line in member_line_obj.browse(cr, uid, ids, context=context):
partner_list.append(line.partner.id)
return partner_list发布于 2014-09-27 15:03:04
如果您希望函数_current_membership成为类的方法(正如您所做的那样),则需要将method=True参数添加到字段定义中:
_columns = {
'current_membership':
fields.function(_current_membership,type='char',
string='Current Membership Type',
store = {
'membership.membership_line':
(_get_membership_type, ['state'], 10)
},
help="Shows the current membership of a user",
method=True),
}这应该会解决你的问题。
当然,您可以简单地使用store=True让您的字段在对象的任何字段中的每个更改时重新计算。
https://stackoverflow.com/questions/26058475
复制相似问题