1

我正在尝试使用此处记录的 DB API获得在给定月份结束的订阅。

我可以在某个日期之前获得:

end_period = datetime.date(2020, 12, 31)
frappe.db.get_list('Subscription', filters={
    'current_invoice_end': ['<', end_period]
})

但是我将如何指定之前end_period和之后start_period

当我尝试

frappe.db.get_list('Subscription', filters={
    'current_invoice_end': ['<', end_period],
    'current_invoice_end': ['>', start_period]
})

它将其视为“或”并列出了范围之外的内容。

在讨论.erpnext.com上交叉发布

4

2 回答 2

2

您可以在 erpnext src 中快速搜索“between”以检查实现。对我来说,这是唯一可靠的来源。

"holiday_date": ["between", (self.start_date, self.end_date)],

您发布的解决方案将不起作用,因为 Python 不允许在字典上使用两个具有相同名称的键。

另一个返回列表的解决方案可能是

holidays = frappe.db.sql_list('''select holiday_date, rate from `tabHoliday`
        where
            parent=%(holiday_list)s
            and holiday_date >= %(start_date)s
            and holiday_date <= %(end_date)s''', {
                "holiday_list": holiday_list,
                "start_date": self.start_date,
                "end_date": self.end_date
            })
于 2020-06-17T04:28:24.823 回答
1

您还可以将过滤器作为列表传递:

frappe.db.get_list('Subscription', filters=[
    ['current_invoice_end', '<', end_period],
    ['current_invoice_end', '>', start_period]
])

我会避免为此使用直接 SQL!

于 2020-07-06T04:40:53.517 回答