【发布时间】:2017-11-14 12:36:05
【问题描述】:
我有一个包含以下字段的模型:“日期”、“员工”和“计划时间”。每个员工都有不同日期的不同计划时间。
我正在尝试构建我的模板,其中员工按行列出,他们的计划工作时间在正确对应日期下的列中列出。
到目前为止,我的模板如下所示:
{% regroup emp3 by employee_name as emp9 %}
{% for employee_name in emp9 %}
<!--Job-->
<div class="table-row table-job-column employee-row"{{employee_name.grouper}}</div>
{% for x in employee_name.list %}
<div class="table-row table-fr-column">{{x.planned_hours}}</div>
{% endfor %}
{% endfor %}
我的看法:
def DesignHubR(request):
emp3_list = Projectsummaryplannedhours.objects.values_list('displayval', 'employeename').filter(businessunit='a').filter(billinggroup__startswith='PLS - Project').filter(Q(displayval=sunday2)|Q(displayval=sunday)).annotate(plannedhours__sum=Sum('plannedhours'))
emp3 = map(lambda x: {'date': x[0], 'employee_name': x[1], 'planned_hours': x[2]}, emp3_list)
context = {'sunday': sunday, 'sunday2': sunday2, 'emp3': emp3}
return render(request,'department_hub_ple.html', context)
我对当前结构的问题是将第一个“计划时间”放在员工旁边。如果该日期没有计划的时间,我需要能够插入一个空白列。我意识到我没有包含嵌套重组,但我尝试过的一切都没有奏效。
注意:我将我的专栏日期拉到重组之外。
编辑以包含 EMP3_LIST:
[{'date': 'W/E 6/18/17', 'planned_hours': Decimal('45.00000'), 'employee_name': 'Bob'}, {'date': 'W/E 6/25/17', 'planned_hours': Decimal('45.00000'), 'employee_name': 'Bob'}, {'date': 'W/E 6/18/17', 'planned_hours': Decimal('17.00000'), 'employee_name': 'Jack'}, {'date': 'W/E 6/25/17', 'planned_hours': Decimal('13.00000'), 'employee_name': 'Jack'}, {'date': 'W/E 6/25/17', 'planned_hours': Decimal('1.00000'), 'employee_name': 'Stan'}, {'date': 'W/E 6/18/17', 'planned_hours': Decimal('27.00000'), 'employee_name': 'Albert'}, {'date': 'W/E 6/25/17', 'planned_hours': Decimal('29.00000'), 'employee_name': 'Albert'}]
编辑2:
{% regroup emp3 by employee_name as emp9 %}
{% for employee_name in emp9 %}
<!--Job-->
<div class="table-row table-job-column employee-row">
{{employee_name.grouper}}</div>
{% regroup employee_name.list by date as date_list %}
{% for x in date_list %}
{% regroup x.list by planned_hours as plan_list %}
{% for y in plan_list %}
<div class="table-row table-fr-column">{{y.grouper}}</div>
{% endfor %}{% endfor %}
【问题讨论】:
-
您是说当员工没有计划一天的工作时间时,您希望该员工当天的单元格为空白?但现在它会忽略没有计划时间的日子,并将计划时间从未来几天转移到左边?
-
完全正确。它现在的设置方式只是从列表的开头开始,并按员工吐出计划的时间。
-
因此,您在
employee_name.list中发送的数据需要每天都有某种项目,即使当天没有计划的时间。假设您有一个字典列表,例如:[ {'planned_hours': 3}, {'planned_hours': 6}, {'planned_hours': 1} ]。如果在它们之间(或之前)有一天,那么你需要有 {'planned_hours': 0} 或类似的东西。你要考虑每一天,否则一切都会向左移动。那有意义吗?这是问题还是其他原因? -
这是有道理的,但我认为这是可以通过嵌套重组来实现的。我将我的观点添加到了 OP。不知道如何构造一个函数以将“0”值添加到列表中。
-
感谢您的意见。我认为您的
grouper仅按员工姓名对列表项进行分组。我很想看看你的emp3_list的例子。如果每个员工都没有与其他员工一样的所有日子,那么会有一些列不对齐。如果您在同一张桌子上没有多名员工,这将不是问题。我认为最好将你所有的日子定义为列,无论那些日子里所有员工是否都有planned_hours。