Django如何在注释max&#xff1f中获取其他字段的值

发布于 2025-01-19 07:01:12 字数 1663 浏览 3 评论 0原文

我想获取注释Max或Min中其他字段('status')的值,我该怎么做?

DB

用户时间状态
name_a2022-01-03 11:23:40.0000003
name_a2022-01-03 17: 56:41.0000004
name_a2022-01-03 22:24:28.0000001
name_a2022-01-04 08:24:28.0000004
name_a2022-01-04 17:34:19.0000004
name_b2022-01-03 08:29:18.0000001
name_b2022-01-03 17:34:39.0000004
# data_1 = Attendance.objects.filter(user__in=user_list)
data_2 = data_1.values('user', 'time__date').annotate(count=Count('time__date')).annotate(s_time=Min("time")).annotate(e_time=Max("time")) 

#print
{'user': 'name_a', 'time__date': datetime.date(2022, 1, 3), 'count': 3, 's_time': datetime.datetime(2022, 1, 3, 11, 23, 40), 'e_time': datetime.datetime(2022, 1, 3, 22, 24, 28)}

我想得到:

{'user': 'name_a', 'time__date': datetime.date(2022, 1, 3), 'count': 3, 's_time': datetime.datetime(2022, 1, 3, 11, 23, 40), 'e_time': datetime.datetime(2022, 1, 3, 22, 24, 28), 's_status': '3', 'e_status': '1' }

我尝试添加过滤器但没有成功

data_2 = data_1.values('user', 'time__date').annotate(count=Count('time__date')).annotate(s_time=Min("time"), e_time=Max("time")).annotate(s_status=F("status"),filter=Q(time=Min("time"))).annotate(e_status=F("status"),filter=Q(time=Max("time")))

I want to get the value of other fields('status') in annotate Max or Min,how can I do it?

DB

usertimestatus
name_a2022-01-03 11:23:40.0000003
name_a2022-01-03 17:56:41.0000004
name_a2022-01-03 22:24:28.0000001
name_a2022-01-04 08:24:28.0000004
name_a2022-01-04 17:34:19.0000004
name_b2022-01-03 08:29:18.0000001
name_b2022-01-03 17:34:39.0000004
# data_1 = Attendance.objects.filter(user__in=user_list)
data_2 = data_1.values('user', 'time__date').annotate(count=Count('time__date')).annotate(s_time=Min("time")).annotate(e_time=Max("time")) 

#print
{'user': 'name_a', 'time__date': datetime.date(2022, 1, 3), 'count': 3, 's_time': datetime.datetime(2022, 1, 3, 11, 23, 40), 'e_time': datetime.datetime(2022, 1, 3, 22, 24, 28)}

i want to get:

{'user': 'name_a', 'time__date': datetime.date(2022, 1, 3), 'count': 3, 's_time': datetime.datetime(2022, 1, 3, 11, 23, 40), 'e_time': datetime.datetime(2022, 1, 3, 22, 24, 28), 's_status': '3', 'e_status': '1' }

I tried adding filter but I didn't succeed

data_2 = data_1.values('user', 'time__date').annotate(count=Count('time__date')).annotate(s_time=Min("time"), e_time=Max("time")).annotate(s_status=F("status"),filter=Q(time=Min("time"))).annotate(e_status=F("status"),filter=Q(time=Max("time")))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

同展鸳鸯锦 2025-01-26 07:01:12

您可以使用 Attendance.objects.order_by('time').first().status - 获取最短日期的状态。并使用 Attendance.objects.order_by('time').last().status - 获取最大日期的状态。

You can use Attendance.objects.order_by('time').first().status - get status of min date. And use Attendance.objects.order_by('time').last().status - get status of max date.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文