我需要对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查询,而当做一次可能更复杂的时候。
答案 0 :(得分:0)
您可以尝试这样(使用subquery):
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]))
仅供参考:这是未经测试的代码。