【问题标题】:How to get revision dates for first and last update for multiple objects?如何获取多个对象的第一次和最后一次更新的修订日期?
【发布时间】:2019-08-23 12:02:14
【问题描述】:

我需要对 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 查询,而可能会做一个更复杂的查询。

【问题讨论】:

    标签: django django-models django-queryset django-orm django-simple-history


    【解决方案1】:

    你可以这样尝试(使用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]))
    

    仅供参考:这是未经测试的代码。

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多