微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查询的日期范围 (Frappe)

如何解决查询的日期范围 (Frappe)

我想为 frappe 查询创建一个过滤器,用于查找日期介于 2 个其他日期之间的值。具体来说,工资单 start_date 和 end_date 应该包括出勤日期。

doc_name = ##Some Salary Slip
document = frappe.get_doc('Salary Slip',doc_name)

leave_count = frappe.db.count('Attendance',filter={
    'employee': document.get('employee'),'status': 'Present','late_entry': 1,'attendance_date': ['>=',document.get('start_date')],'attendance_date': ['<=',document.get('end_date')]})

在这行不通,因为字典中有重复的条目。因此,根据 12,我应该能够使用列表作为过滤器,但可以这样尝试

leave_count = frappe.db.count('Attendance',filters=[
             ['employee','=',document.get('employee')],['status','Present'],['late_entry',1],['attendance_date','>=','<=',document.get('end_date')]])

但它抛出一个错误

TypeError: 只能将 str(不是“list”)连接到 str

快速浏览一下代码说明,当前只支持字典,for 循环需要键而不是列表,并且 between 不是选项,因为该运算符会自动转换为 '=' 并且不会不行。

那我该怎么做?

编辑:目前最简单的方法是使用 frappe.db.get_list 并在 python 中统计结果。虽然这效率低下,但确实有效。

解决方法

您可能希望使用 frappe.db.sql 方法运行原始 SQL 查询。

result = frappe.db.sql("""
SELECT COUNT(*) FROM `tabAttendance`
WHERE
    employee=%(employee)s
    AND status= 'Present'
    AND late_entry= 1,attendance_date between %(start_date)s AND %(end_date)s
""",{
    'employee': document.get('employee')
    'start_date' : document.get('start_date')
    'end_date' : document.get('end_date')})
leave_count = result[0][0]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。