Python 使用odoo旧api在记录集级别执行方法
我正在尝试编辑odoo内置的hr_Attention.py。我的问题是针对特定记录而不是整个记录集进行验证。在新的api中,我们使用@api multi来执行一个记录集。那么,如何使用odoo 8的旧api方法执行类似的记录集呢Python 使用odoo旧api在记录集级别执行方法,python,openerp,odoo-8,Python,Openerp,Odoo 8,我正在尝试编辑odoo内置的hr_Attention.py。我的问题是针对特定记录而不是整个记录集进行验证。在新的api中,我们使用@api multi来执行一个记录集。那么,如何使用odoo 8的旧api方法执行类似的记录集呢 def _altern_si_so(self, cr, uid, ids, context=None): """ Alternance sign_in/sign_out check. Previous (if exists) must be of o
def _altern_si_so(self, cr, uid, ids, context=None):
""" Alternance sign_in/sign_out check.
Previous (if exists) must be of opposite action.
Next (if exists) must be of opposite action.
"""
for att in self.browse(cr, uid, ids, context=context):
# search and browse for first previous and first next records
prev_att_ids = self.search(cr, uid, [('employee_id', '=', att.employee_id.id), ('name', '<', att.name),
('action', 'in', ('sign_in', 'sign_out'))], limit=1, order='name DESC')
next_add_ids = self.search(cr, uid, [('employee_id', '=', att.employee_id.id), ('name', '>', att.name),
('action', 'in', ('sign_in', 'sign_out'))], limit=1, order='name ASC')
prev_atts = self.browse(cr, uid, prev_att_ids, context=context)
next_atts = self.browse(cr, uid, next_add_ids, context=context)
# check for alternance, return False if at least one condition is not satisfied
if prev_atts and prev_atts[0].action == att.action:
return self.write(cr, uid, ids, {'state': True})
if next_atts and next_atts[0].action == att.action: # next exists and is same action.
return self.write(cr, uid, ids, {'state': True})
if (not prev_atts) and (not next_atts) and att.action != 'sign_in': # first attendance must be sign_in
return self.write(cr, uid, ids, {'state': True})
else:
return self.write(cr, uid, ids, {'state':False})
return True
def\u altern\u si\u so(self、cr、uid、ids、context=None):
“”“交替登录/注销支票。”。
上一个(如果存在)必须具有相反的作用。
下一个(如果存在)必须具有相反的作用。
"""
对于self.browse中的att(cr、uid、ids、context=context):
#搜索和浏览上一条记录和下一条记录
prev_att_id=self.search(cr,uid,[('employee_id','=',att.employee_id.id),('name','',att.name),
('action'、'in'、('sign_in'、'sign_out')),limit=1,order='name ASC')
prev_atts=self.browse(cr、uid、prev_att_id、context=context)
next\u atts=self.browse(cr、uid、next\u add\u id、context=context)
#检查更改,如果至少有一个条件不满足,则返回False
如果上一个附件和上一个附件[0]。操作==att.action:
返回self.write(cr、uid、ID,{'state':True})
如果next_atts和next_atts[0]。action==att.action:#next存在并且是相同的操作。
返回self.write(cr、uid、ID,{'state':True})
如果(不是上一个附件)和(不是下一个附件)和附件操作!='签到:#第一次出席必须签到
返回self.write(cr、uid、ID,{'state':True})
其他:
返回self.write(cr、uid、ID,{'state':False})
返回真值
_约束=[
(_altern_si_so,'Error!Sign-in(resp.Sign-out)必须在Sign-out(resp.Sign-in)之后,['action'])]
我想执行此方法来检查整个记录集的有效性,而不仅仅是正在编辑或创建的特定记录。从for loop内部删除返回值,并将其放在for loophi@Bharti的外部。我仍然不清楚您的查询,请编辑您的问题,以便我能理解简言之,“如果我从记录的中间编辑一条记录,那么…”验证代码只对自记录或特定记录运行,而不是对整个记录集运行。如果我们有数千条记录,运行这样的验证将降低应用程序的速度。因此,是否有一种方法仅对树视图中显示的记录列表检查此条件。(即)1-20、1-40在考勤模块中,我们有登录和注销规则,它们如下所示。(执行的第一个操作应为登录。上一个操作和当前操作不应相同。下一个操作和当前操作不应相同)。如果我们导入这些记录,它将抛出错误。我所做的是,而不是显示错误。我将记录更改为红色。现在,当用户开始更正这些记录时,记录将更改为黑色。我的问题是,由于上一个操作或下一个操作不知道正在更正记录集,因此某些记录显示错误。请从内部删除返回值,以便oop并将其放在loophi@Bharti的外侧。您的查询对我来说仍然不清楚,请编辑您的问题,以便我能够理解“如果我从记录的中间编辑一条记录。。。。“简言之,验证代码只对自记录或特定记录运行,而不是对整个记录集运行。如果我们有数千条记录,运行这样的验证将减慢应用程序的速度。那么,是否有一种方法仅针对树状视图中显示的记录列表检查此条件。(即)1-20、1-40在考勤模块中,我们有如下登录和注销规则。(执行的第一个操作应为登录。上一个操作和当前操作不应相同。下一个操作和当前操作不应相同)。如果我们导入这样的记录,它会抛出错误。我所做的是,而不是显示错误。我把唱片换成了红色。现在,当用户开始更正这些记录时。记录将变为黑色。我的问题是一些记录显示错误是由于上一个操作或下一个操作不知道记录集正在被更正。