gpt4 book ai didi

python - Django - 从每个组的最新日期检索对象 - PersonPhoto

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

我的数据库包含不同人的护照图像。就像是:

class Person(models.Model):
pass

class PersonPhoto(models.Model):
date_captured = models.DateField()
person = models.ForeignKey(Person, null=False)
我想为每个人提取他被拍摄的最近日期的所有图像。
因此,如果人 A 有 8 月 5、5、9、11、11 日的照片,而人 B 有 8 月 7、9、13、13、19、19 日的图像,那么我想为人 A 获取 8 月 11 日的两张图像,以及 B 人 8 月 19 日的两张照片。
我目前这样做的方式是这样的:
specific_dates_queryset = Q()
for photo in PersonPhoto.objects.all().values('person_id').annotate(max_date=Max('date_captured')):
specific_dates_queryset |= Q(person_id=photo["person_id"], date_captured=photo["max_date"])


for photo in PersonPhoto.objects.filter(specific_dates_queryset).order_by("person_id"):
print(f"image for person {photo.person_id}, of date {photo.date_captured}")
这个想法是首先为每个人找到一张照片的最新日期,然后在一个新的查询中从这些日期为这些人获取这些图像。
是否有更简单的解决方案可以在数据库中完成所有操作并避免冗余查询和数据获取?

最佳答案

在单个查询中执行此操作的一种简单方法是使用相关人员的最新日期注释每张照片,然后按注释进行过滤。这应该返回所有想要的 PersonPhoto在查询集中

from django.db.models import Max, F

PersonPhoto.objects.annotate(
latest=Max('person__personphoto__date_captured')
).filter(
date_captured=F('latest')
)
由于注释,我不确定这会有多高的性能,这可能取决于您使用的数据库和数据的性质

关于python - Django - 从每个组的最新日期检索对象 - PersonPhoto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69131351/

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