【发布时间】:2017-11-06 12:32:02
【问题描述】:
我有一个查询以下列格式输出数据:
[["W/E 6/11/17", "Carter, J", 40.0],
["W/E 6/18/17", "Carter, J", 40.0],
["W/E 6/11/17", "Linn, K", 27.0],
["W/E 6/18/17", "Linn, K", 27.0],
["W/E 6/11/17", "Massey, S", 55.0],
["W/E 6/18/17", "Massey, S", 45.0]]
我的查询:
emp3 = (
Projectsummaryplannedhours.objects.values(
'employeename', 'displayval')
.order_by()
.filter(businessunit='a')
.filter(billinggroup__startswith='PLS - Pip')
.filter(Q(displayval=sunday2)|Q(displayval=sunday))
.annotate(plannedhours__sum=Sum('plannedhours'))
)
在我的模板中,我目前正在使用 for 循环,但它返回列表中的所有项目,而不仅仅是列表的第一个列表。
{% for x in emp3 %}
{{x.employeename}}
{{x.plannedhours__sum}}
我想做的是遍历列表并以水平形式显示 Employee: Value for W/E 6/11, Value for W/E 6/18。
型号:
class Projectsummaryplannedhours(models.Model):
number = models.CharField(db_column='Number', max_length=50, blank=True, null=True) # Field name made lowercase.
description = models.CharField(db_column='Description', max_length=100, blank=True, null=True) # Field name made lowercase.
clientname = models.CharField(db_column='ClientName', max_length=100, blank=True, null=True) # Field name made lowercase.
department = models.CharField(db_column='Department', max_length=50, blank=True, null=True) # Field name made lowercase.
billinggroup = models.CharField(db_column='BillingGroup', max_length=50, blank=True, null=True) # Field name made lowercase.
businessunit = models.CharField(db_column='BusinessUnit', max_length=50, blank=True, null=True) # Field name made lowercase.
employeename = models.CharField(db_column='EmployeeName', max_length=50, blank=True, null=True) # Field name made lowercase.
displayval = models.CharField(db_column='DisplayVal', max_length=50, blank=True, null=True) # Field name made lowercase.
startofweek = models.DateTimeField(db_column='StartOfWeek', blank=True, null=True) # Field name made lowercase.
endofweek = models.DateTimeField(db_column='EndOfWeek', blank=True, null=True) # Field name made lowercase.
plannedhours = models.DecimalField(db_column='PlannedHours', max_digits=10, decimal_places=5, blank=True, null=True) # Field name made lowercase.
rateschedule = models.CharField(db_column='RateSchedule', max_length=50, blank=True, null=True) # Field name made lowercase.
classification = models.CharField(db_column='Classification', max_length=50, blank=True, null=True) # Field name made lowercase.
dollarsforecast = models.DecimalField(db_column='DollarsForecast', max_digits=10, decimal_places=5, blank=True, null=True) # Field name made lowercase.
deleted = models.NullBooleanField(db_column='Deleted') # Field name made lowercase.
datelastmodified = models.DateTimeField(db_column='DateLastModified', blank=True, null=True) # Field name made lowercase.
datecreated = models.DateTimeField(db_column='DateCreated', blank=True, null=True) # Field name made lowercase.
更新查询:
emp3_list = Projectsummaryplannedhours.objects.values('employeename', 'displayval').order_by().filter(businessunit='a').filter(billinggroup__startswith='PLS - Pip').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)
我尝试过的每个查询:
def DesignHubR(request):
#emp1 = Projectsummaryplannedhours.objects.filter(employeename__startswith='Linn').values_list('endofweek').annotate(plannedhours__sum=Sum('plannedhours'))
day = datetime.datetime.today()
start = day - timedelta(days=day.weekday())
s1 = start + timedelta(days=6)
day2 = day + + timedelta(days=7)
start2 = day2 - timedelta(days=day.weekday())
s2 = start2 + timedelta(days=6)
sunday = datetime.datetime.strftime(s1, "W/E %#m/%#d/%y")
sunday2 = datetime.datetime.strftime(s2, "W/E %#m/%#d/%y")
employee = Projectsummaryplannedhours.objects.order_by().values_list('employeename', flat=True).distinct().filter(businessunit='a').filter(billinggroup__startswith='PLS - Pip')
emp1 = Projectsummaryplannedhours.objects.values_list('displayval', 'employeename').filter(businessunit='a').filter(billinggroup__startswith='PLS - Pip').filter(displayval=sunday).annotate(plannedhours__sum=Sum('plannedhours'))
emp4 = Projectsummaryplannedhours.objects.filter(employeename__startswith='Linn').filter(Q(displayval=sunday2)|Q(displayval=sunday)).annotate(plannedhours__sum=Sum('plannedhours'))
emp2 = Projectsummaryplannedhours.objects.values_list('displayval', 'employeename').filter(businessunit='a').filter(billinggroup__startswith='PLS - Pip').filter(Q(displayval=sunday2)|Q(displayval=sunday)).annotate(plannedhours__sum=Sum('plannedhours'))
emp3_list = Projectsummaryplannedhours.objects.values_list('displayval', 'employeename').filter(businessunit='a').filter(billinggroup__startswith='PLS - Pip').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 = {'emp1': emp1, 'emp2': emp2, 'sunday2': sunday2, 'employee': employee, 'emp3': emp3, 'emp4': emp4}
return render(request,'department_hub_ple.html', context)
【问题讨论】:
-
如何将列表发送到模板上下文?
-
我不清楚你想要什么。查询输出正确还是您想要正确的部分?
-
context = {'emp3': emp3} 然后渲染上下文
-
@Jérôme 查询输出是正确的,除非我需要另一个输出来在我的模板中获得所需的结果。我刚刚发布了查询输出,所以我输出的数据会很清楚。
-
请注意,多次调用
filter()最终会筛选出匹配一个或多个条件的对象。这是你所期待的吗? stackoverflow.com/questions/8164675/…