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

问题描述 投票:2回答:3

[当我将收到产品的日期和数量更改为库存日期时创建一个方法。移动,我在班级声明为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)

此方法效果很好,但我想比较起始日期> =起始日期和日期<=起始日期之间的“库存日期”。我也想像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

谢谢

openerp odoo openerp-7 openerp-8 odoo-8
3个回答
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更改日期格式。


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

我希望这对您有帮助:)


0
投票

这是一个简单的例子:员工= self.env ['hr.employee']。search([],order ='姓名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,
        })
© www.soinside.com 2019 - 2024. All rights reserved.