gpt4 book ai didi

python - 在 Django 中过滤最新记录

转载 作者:行者123 更新时间:2023-11-28 21:15:13 24 4
gpt4 key购买 nike

编写我的第一个 Django 应用程序,它从其他应用程序获取消息并存储有关它们的报告。

由于我希望可以改进以下逻辑,它的执行速度非常慢,但我正在努力寻找一种无需循环的方法。

基本上,我只是尝试浏览所有应用程序(大约有 500 个独特的应用程序)并获取每个应用程序的最新报告。这是我的模型和功能:

class App(models.Model):
app_name = models.CharField(max_length=200)
host = models.CharField(max_length=50)

class Report(models.Model):
app = models.ForeignKey(App)
date = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=20)
runtime = models.DecimalField(max_digits=13, decimal_places=2,blank=True,null=True)
end_time = models.DateTimeField(blank=True,null=True)



def get_latest_report():
""" Returns the latest report from each app """
lset = set()
## get distinct app values
for r in Report.objects.order_by().values_list('app_id').distinct():
## get latest report (by date) and push in to stack.
lreport = Report.objects.filter(app_id=r).latest('date')
lset.add(lreport.pk)
## Filter objects and return the latest runs
return Report.objects.filter(pk__in = lset)

最佳答案

如果您不害怕对数据库中的每个应用程序执行查询,您可以尝试这种方式:

def get_latest_report():
""" Returns the latest report from each app """
return [app.report_set.latest('date') for app in App.objects.all()]

这会为您数据库中的每个应用程序添加一个查询,但确实很有表现力,有时可维护性和可读性比性能更重要。

关于python - 在 Django 中过滤最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30584090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com