【问题标题】:How to aggregate time for each employee in bi-weekly pay schedule in Django如何在Django的双周工资计划中汇总每个员工的时间
【发布时间】:2021-01-01 05:36:22
【问题描述】:

如何将每个员工的 time_work 累加到每个月的 15 号?

class TimeLog(models.Model):
    employee    = models.IntegerField(null=True, blank=True)
    start_date  = models.DateTimeField (null=True, blank=True)
    end_date    = models.DateTimeField (null=True, blank=True)
    time_worked = models.DurationField(null=True, blank=True)

【问题讨论】:

    标签: python-3.x django django-models django-queryset


    【解决方案1】:

    尝试以下方法:

    # You need to figure a way to configure the dates below but the code is the same
    timelog = TimeLog.objects.filter(end_date__range[01/09/2020, 15/09/2020])
    employee_time = {}
    for log in timelog:
        if timelog.employee not in employee_time:
            employee_time[timelog.employee] = timelog.time_worked
            continue
    
        employee_time[timelog.employee] += timelog.time_worked
    

    【讨论】:

    • 能否解释一下“if timelog.employee not in employee_time:”中的代码
    • 意思是如果我们在employee_time 字典中不包含员工“Danny”(例如),我们想要添加他并为他分配他的时间日志的值。我们必须声明这一点,因为如果他在employee_time 字典中不存在,我们会尝试添加一个不存在的值(+= 运算符)并且我们会收到错误。
    • TypeError 预期的字符串或类似字节的对象@timelog = TimeLog.objects.filter(end_date__range=(2020-9-1, 2020-9-15))
    • 范围需要用[]包裹。我不知道 Django 是否会允许这样的格式化,但你必须做出这样的调整。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    相关资源
    最近更新 更多