我想要为一个frappe查询创建一个筛选器,该过滤器查找的值具有两个其他日期之间的日期。具体来说,工资单start_date和end_date应该包括attendance_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')]})现在,由于字典中有重复的条目,这是行不通的。因此,根据1和2,我应该可以使用列表作为筛选器,但是可以这样做
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中计算结果。虽然这是低效的,但确实有效。
发布于 2021-06-14 13:24:15
您可能希望使用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]https://stackoverflow.com/questions/66577514
复制相似问题