gpt4 book ai didi

Django:无法使用预取计算属性进行注释

转载 作者:行者123 更新时间:2023-12-04 07:57:29 25 4
gpt4 key购买 nike

目标是在给定的时间范围内对每个员工的工作时间进行汇总和注释。
楷模:

class Employee(models.Model):
first_name = models.CharField(max_length=64)

class WorkTime(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name="work_times")

work_start = models.DateTimeField()
work_end = models.DateTimeField()
work_delta = models.IntegerField(default=0)

def save(self, *args, **kwargs):
self.work_delta = (self.work_end - self.work_start).seconds
super().save(*args, **kwargs)
获取给定日期范围内每位员工的工作时间:
queryset = Employee.objects.prefetch_related(
Prefetch(
'work_times',
queryset=WorkTime.objects.filter(work_start__date__range=("2021-03-01", "2021-03-15"]))
.order_by("work_start"),
to_attr="filtered_work_times"
)).all()
尝试为每个员工注释 work_delta 的总和:
queryset.annotate(work_sum=Sum("filtered_work_times__work_delta"))
这会导致 FieldError:
Cannot resolve keyword 'filtered_work_times' into field. Choices are: first_name, id, work_times
从这里如何进行?顺便说一句,使用 Django 3.1。

最佳答案

您应该使用 filtering on annotations .
我没有尝试过,但我认为以下代码可能对您有所帮助:

from django.db.models import Sum, Q

Employee.objects.annotate(
work_sum=Sum(
'work_times__work_delta',
filter=Q(work_times__work_start__date__range=["2021-03-01", "2021-03-15"])
)
)

关于Django:无法使用预取计算属性进行注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66626491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com