首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询的日期范围(Frappe)

查询的日期范围(Frappe)
EN

Stack Overflow用户
提问于 2021-03-11 06:32:26
回答 1查看 344关注 0票数 0

我想要为一个frappe查询创建一个筛选器,该过滤器查找的值具有两个其他日期之间的日期。具体来说,工资单start_date和end_date应该包括attendance_date。

代码语言:javascript
复制
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,我应该可以使用列表作为筛选器,但是可以这样做

代码语言:javascript
复制
leave_count = frappe.db.count('Attendance', filters=[
             ['employee', '=', document.get('employee')],
             ['status', '=', 'Present'],
             ['late_entry', '=', 1],
             ['attendance_date', '>=', document.get('start_date')],
             ['attendance_date', '<=', document.get('end_date')]])

但它会抛出一个错误

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

快速查看代码说明,当前只有diciontaries支持for循环,它需要键而不是列表,而between不是选项,因为该操作符被自动转换为'=‘,这是行不通的。

那我该怎么做?

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

EN

回答 1

Stack Overflow用户

发布于 2021-06-14 13:24:15

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

代码语言:javascript
复制
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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66577514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档