Как получить даты ревизии для первого и последнего обновления для нескольких объектов? - PullRequest
0 голосов
/ 02 апреля 2019

Мне нужно сделать массовый запрос для всех экземпляров SomeModel, пометив их датой их создания и последним обновлением. Вот что я попробовал и очень медленно:

query = SomeModel.objects.all()
for entry in query:
    last_updated_date = entry.details.history.last().history_date
    created_date = entry.details.history.first().history_date
    csv_writer.writerow([entry.name, last_updated_date, created_date])

Как я могу оптимизировать код? Я полагаю, что проблема в том, что я делаю много запросов SELECT, когда, вероятно, один более сложный будет делать.

1 Ответ

0 голосов
/ 02 апреля 2019

Вы можете попробовать вот так (используя подзапрос ):

from django.db.models import OuterRef, Subquery
from simple_history.models import HistoricalRecords

histories = HistoricalRecords.objects.filter(pk=OuterRef('details__history')).order_by('history_date')

SomeModel.objects.annotate(created_date=Subquery(histories.values('history_date')[:1])).annotate(last_updated==Subquery(histories.order_by('-history_date').values('history_date')[:1]))

К вашему сведению: это непроверенный код.

...