我创建了一个方法,当我将收到产品的日期和数量更改为stock.move时,我在班级中声明start_date = fields.Datetime()
def onchange_project(self, cr, uid,start_date):
"""
onchange handler of start date.
"""
pool_stockmove =self.pool.get('stock.move')
domain =[('date','>=',start_date)]
ids = pool_stockmove.search(cr, uid, domain)
这种方法很好但我想比较start_date日期> = start_date和date< = start_date之间的“库存日期”。我也希望像hr_timesheet
上的方法一样格式化日期cr.execute('SELECT id \
FROM hr_timesheet_sheet_sheet \
WHERE (date_from <= %s and %s <= date_to) \
AND user_id=%s \
AND id <> %s',(sheet.date_to, sheet.date_from, new_user_id, sheet.id))
if cr.fetchall():
return False
由于
答案 0 :(得分:2)
日期以字符串格式存储。您可以在hr示例中使用sql进行比较,但我建议使用ORM进行比较,而不是使用原始sql进行比较。它更方便,建议始终使用它,因为sql
转义了安全性以及用代码编写的其他检查(但可能不是代码中的情况)。
很难理解您要比较哪个日期以及为什么不能这样做。
我想你想做这样的事情:
[('date', '>=', 'start_date'), ('date', '<=', 'start_date')]
域被定义为元组列表。这种语法意味着默认情况下在元组之间使用and
。你可以像这样指定它(但它是一样的):
['&', ('date', '>=', 'start_date'), ('date', '<=', 'start_date')]
它与上面的行相同(如果使用'|'
,则表示or
)。
Odoo damains使用波兰表示法:https://en.wikipedia.org/wiki/Polish_notation
对于日期格式化,如果需要,可以使用python模块datetime
更改日期格式。
答案 1 :(得分:0)
你可以尝试这样的事情
cr.execute("SELECT id FROM hr_timesheet_sheet_sheet WHERE (date_from >= %s AND date_to <= %s) AND (user_id=%s) AND (id <> %s)",(sheet.date_from,sheet.date_to, new_user_id, sheet.id))
if cr.fetchall():
return False
我希望这对你有用:)
答案 2 :(得分:0)
这是一个简单的例子: 员工= self.env ['hr.employee']。search([],order ='name asc')
for employee in employees:
presence_count = self.env['hr.attendance'].search_count([
('employee_id', '=', employee.id),
('check_in', '>=', date_start_obj.strftime(DATETIME_FORMAT)),
('check_out', '<=', date_end_obj.strftime(DATETIME_FORMAT)),
])
absence_count = date_diff - presence_count
docs.append({
'employee': employee.name,
'presence': presence_count,
'absence': absence_count,
})