django - 如何使用 group by 并获取每个组中的每条记录?
问题描述
我想每天汇总每个人的所有考勤记录,在我目前的解决方案中,我需要获取所有记录然后使用for
循环,有没有更好的方法来获取查询集,如下所示:
class AttendanceRecord(models.Model):
user_id = models.IntegerField()
device_id = models.IntegerField()
f_time = models.DateTimeField(auto_created=True)
# How to group record by user and get a queryset like the following?
[
[
{'user_id': 1, 'device_id': 1, 'f_time': '2020-11-11 8:00:00'},
{'user_id': 1, 'device_id': 1, 'f_time': '2020-11-11 18:00:00'}
],
[
{'user_id': 2, 'device_id': 2, 'f_time': '2020-11-11 8:00:00'},
{'user_id': 2, 'device_id': 2, 'f_time': '2020-11-11 18:00:00'}
],
]
# or like this
[
{user_id1: [
{'device_id': 1, 'f_time': '2020-11-11 8:00:00'},
{'device_id': 1, 'f_time': '2020-11-11 18:00:00'}
]},
{user_id2: [
{'device_id': 2, 'f_time': '2020-11-11 8:00:00'},
{'device_id': 2, 'f_time': '2020-11-11 18:00:00'}
]},
]
解决方案
您需要的数据集可以使用 prefetch_related 高效构建。
userinfo = UserInfo.objects.all().prefetch_related("attendancerecord_set")
for ui in userinfo:
for ar in ui.addendancerecord_set.all():
print(ar)
在模板代码中
{% for ui in userinfo %}
{% for ar in ui.addendancerecord_set.all %}
f_Device_id:{{ ar.f_Device_id }} f_time:{{ ar.f_time }}
{% endfor %}
{% endfor %}
推荐阅读
- javascript - 为什么我不能将数据传输到另一个 HTML 页面
- javascript - 带有字符串/数字数组的 React-admin 数组输入
- macos - NSGestureRecognizer 的 cancelTouchesInView 等效项
- jquery - jQuery-单击图像上的坐标并在那里画一个圆圈
- python - 将新的日期时间添加到具有值的日期时间索引 Pandas 数据框
- php - 无法将自定义站点配置添加到 Silverstripe 4
- python - UUIDS 的 peewee ArrayField
- c# - 添加 CosmosDB 实体,(无法解析租户类型实体的 iD)
- c++ - 在编译时检查指针内存布局:联合方法在 constexpr 中失败
- r - 在 R 中自动运行文件