domain openerp如何比较odoo中的2个日期字段

时间:2015-06-25 13:52:06

标签: openerp odoo openerp-7 openerp-8 odoo-8

我创建了一个方法,当我将收到产品的日期和数量更改为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

由于

3 个答案:

答案 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,
        })