【问题标题】:Domain for fetching records from specified date range returns records outside that range用于从指定日期范围获取记录的域返回该范围之外的记录
【发布时间】:2019-09-04 07:35:09
【问题描述】:

我正在尝试使用 XML-RPC 从 Odoo8 数据库中获取数据。

我有这样用 Python 写的请求:

common = xmlrpclib.ServerProxy('{}/xmlrpc/2/common'.format(url))
uid = common.authenticate(db, username, password, {})

models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url))
test = models.execute_kw(db, uid, password,
    'calendar.event', 'search_read',
    [['&',['start_datetime', '>=', '2019-09-03 00:00:00'],['stop_datetime', '<', '2019-09-10 00:00:00']]],
    {'fields': ['allday', 'start_datetime', 'start_date', 'stop_datetime'], 'limit': 5})

但我得到的记录超出了请求的日期范围。

我也尝试使用日期而不是日期时间(当事件标记为全天时使用此字段)但效果不佳。

我使用硬编码字符串只是为了测试。最终我会使用这样的东西:

datetime.today().strftime("%Y-%m-%d %H:%M:%S")

如何仅从所需的日期范围获取数据?

【问题讨论】:

  • 您可以删除&amp;,它是默认应用的,您的代码应该可以完美运行!!我这里没看出问题,能把整个代码放上来吗?
  • 只需删除 &amp; 并确保您没有覆盖 search_read 或任何更改传递给该方法的域的方法。只需调试更多以查看在 models.Model 类中传递给搜索读取的最终域是什么。在 search_read 方法中设置一个断点,看看传递给它的域是什么
  • 我不确定,但我看到__last_updaterequest_date 之间的区别在于request_date 被存储而__last_update 没有被存储。
  • 使用你将在 Odoo api 教程中找到的 common.version() 示例
  • 我以为它会返回版本日期对不起,我只想知道这个字段是否被计算,如果域工作正常,请尝试将过滤器与其他字段一起使用,然后这个字段不存储在数据库中,因此您必须弄清楚如何使用其他字段更改您的域

标签: python odoo odoo-8 xml-rpc


【解决方案1】:

我刚刚找到了解决方案。

我试图在我的域中使用start_datestart_datetime,但实际上有另一个名为start 的字段工作正常(如果停止,则为stop date 是您要查找的内容)。

start_datestart_datetime相反,它是存储的字段,因此可以在域内使用。

这是修改后的请求的样子:

models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url))
test = models.execute_kw(db, uid, password,
    'calendar.event', 'search_read',
    [[['start', '>=', '2019-09-01 00:00:00'],['start', '<=', '2019-09-08 00:00:00']]],
    {'fields': ['name', 'allday', 'start', 'stop']})

感谢@Elegant Odoo 的帮助并推动我走上正轨。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2013-06-25
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    相关资源
    最近更新 更多