【发布时间】:2021-11-06 21:31:38
【问题描述】:
我的数据库包含不同人的护照图像。比如:
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}")
这个想法是首先找到每个人的照片的最新日期,然后在一个新的查询中从这些日期获取这些人的这些图像。
是否有更简单的解决方案可以在数据库中完成所有操作并避免冗余查询和数据提取?
【问题讨论】:
标签: python python-3.x django django-models django-queryset