django 1.5按日期获取最新的记录

时间:2013-08-14 03:57:21

标签: database django date orm

我想获得所有具有最新日期的记录。

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))

导致无数据

3 个答案:

答案 0 :(得分:0)

使用latest()方法

Report.objects.latest('date')

答案 1 :(得分:0)

您可以使用order_by1.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()

答案 2 :(得分:0)

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

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