【发布时间】:2020-09-14 00:46:39
【问题描述】:
我正在尝试根据 Timesheet 模型中字段 (time_worked) 的聚合填充 Employee 模型中的字段(小时)。
模型.PY
class Employee(models.Model):
...
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, related_name='employees')
hours = models.DurationField(null=True, blank=True)
class Timesheet(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
employee = models.ForeignKey(Employee, on_delete=models.CASCADE, null=True,)
time_worked = models.DurationField(null=True, blank=True)
我试过hours=Timesheet.objects.filter(employee=employee).aggregate(Sum('time_worked'))
但是当我尝试插入到 Employee 模型中时,就会出现错误。
如果我这样做,Employee.objects.filter(id=employee).update(hours=hours),我会收到错误“id 需要一个数字,但得到了 Jacob”。但 Timesheet 中的 id 实际上是一个数字(外键)。
如何将仅员工 A 的 Timesheet 模型中的 time_worked 相加,并将结果插入员工 A 的 Employee 模型的 hours 列?
或者简单地说,我如何将 Timesheet 中的员工与 Employee 中的员工匹配?
【问题讨论】:
-
aggregate()的结果是一个字典,你试过读它的time_worked__sum键吗? -
如何读取密钥?
-
所以我这样做了,这就是它打印出来的内容:{'time_worked__sum': datetime.timedelta(seconds=41103, microseconds=281416)}。没有太多可采取的行动。
-
什么意思?
hours['time_worked__sum']是员工的time_worked的总和。您可以将其设置为Employee的hours和save()
标签: python-3.x django postgresql django-models