django 1.5 按日期获取最新记录

Posted

技术标签:

【中文标题】django 1.5 按日期获取最新记录【英文标题】:django 1.5 Get latest records by Date 【发布时间】:2013-08-14 03:57:20 【问题描述】:

我想获取所有日期最近的记录。

class Report(models.Model):
   id = models.AutoField(primary_key=True)
   part = models.ForeignKey(Part,related_name="reports")
   this_week_use = models.IntegerField(blank=True,null=True,default=0)
   this_week_fail = models.IntegerField(blank=True,null=True,default=0)
   this_week_fail_percent = models.DecimalField(max_digits=5,decimal_places=2,blank=True,null=True,default=0.00)
   prev4_week_use = models.IntegerField(blank=True,null=True,default=0)
   prev4_week_fail = models.IntegerField(blank=True,null=True,default=0)
   prev4_week_fail_percent = models.DecimalField(max_digits=5,decimal_places=2,blank=True,null=True,default=0.00)
   platform = models.ForeignKey(Platform,related_name="reports")
   date = models.DateField(auto_now_add=True)
   class Meta:
    unique_together = ('part','platform','date')

我试过了

rows = Report.objects.annotate(max_date=Max('date').filter(date=max_date))

导致没有数据

【问题讨论】:

【参考方案1】:

使用latest()方法

Report.objects.latest('date')

【讨论】:

这让我得到了最新日期,而不是所有最新日期的记录。【参考方案2】:

您可以使用order_by,它在1.5 中可用:

latest_rows = Report.objects.all().order_by('-date')

如果您想在 report 模型中进行任何查询,默认情况下按此 date 字段排序,那么您可以在 Report 模型的元部分添加此 ordering。

class Report(models.Model):   
   class Meta:
      ordering = '-date'

现在您可以在查询中不使用order_by 进行查询,但结果相同:

latest_rows = Report.objects.all()

【讨论】:

【参考方案3】:

如果您不介意进行两次查询,应该这样做:

max_date = Report.objects.latest('date').date
qs = Report.objects.filter(date=max_date)

【讨论】:

以上是关于django 1.5 按日期获取最新记录的主要内容,如果未能解决你的问题,请参考以下文章

使用 group by 获取最新的日期记录

MySQL SQL 获取表中的最新记录?

如何在 django 中按日期范围过滤记录?

SQL 按日期排序并按用户获取结果

每个项目 mongodb 组的最新记录(按日期)

Sql 查询以获取最多 10 条的最新记录并按提到行排名的字段排序 [关闭]