Django фильтр со свойствами последнего объекта
Я пытаюсь рефакторить этот кусок кода, чтобы улучшить временную сложность за счет уменьшения количества циклов.
items = DataActionItem.objects.filter(status='resolved', site_id=settings.SITE_ID)
resolved = []
for item in items:
init = [resolved.history_date for resolved in
item.history.filter(status='resolved',
history_date__lte=datetime.datetime.today(),
history_date__gt=datetime.datetime.today() - datetime.timedelta(
days=7)) if getattr(resolved.prev_record, 'status') != 'resolved']
resolved.append(max(init).date())
rc = Counter()
rc.update(resolved)
Пока вот что у меня есть.
DataActionItem.history.filter(site_id =40, status='resolved',
history_date__lte=datetime.datetime.today(),
history_date__gt=datetime.datetime.today()-datetime.timedelta(days=7)).values('id',
'history_date').distinct().annotate(day=TruncDate('history_date'),
).values('day').annotate(n=Count('id')).order_by('day')
Во время написания этого запроса я застрял на моменте, когда проверял предыдущий объект. См. ниже.
getattr(resolved.prev_record, 'status') != 'resolved'
Я хотел бы сравнить каждый объект в наборе запросов с последним объектом и вернуть только те, у которых их предыдущие объекты истории не имеют разрешенного статуса.
Если кто-то может помочь мне сократить количество циклов в исходном запросе, это будет замечательно.