2015-09-06 67 views
0

我有一個Django類,看起來像這樣的:對的my_integer給定值的最新created_ts如何獲得最大字段值的Django模型?

class MyModel(models.Model): 
    my_integer = models.IntegerField(default=-1) 
    created_ts = models.DateTimeField(default=datetime.utcnow, editable=False) 

我怎樣才能獲得的模型(不只是字段的值)的實例?我認爲下面的行使用註釋會工作,但是,這回到我所有的3個MyModel實例有my_integer==77,而不是我期待的單個值。奇怪的是,這3個實例中的每一個都將last_created設置爲它自己的created_ts,而不是所有匹配實例的最大值。

>>> len(MyModel.objects.filter(my_integer=77)) 
3 

>>> from django.db.models import Max, F 
>>> x = MyModel.objects.filter(my_integer=77).annotate(last_created=Max('created_ts')).filter(created_ts=F('last_created')) 
>>> len(x) 
3 

>>> print x[0].my_integer, x[0].created_ts, x[0].last_created 
77 2015-09-07 07:46:27.343869 2015-09-07 07:46:27.343869 

>>> print x[1].my_integer, x[1].created_ts, x[1].last_created 
77 2015-09-12 07:46:27.343869 2015-09-12 07:46:27.343869 

>>> print x[2].my_integer, x[2].created_ts, x[2].last_created 
77 2015-09-13 07:46:27.343869 2015-09-13 07:46:27.343869 

回答

1

您可以在查詢集上使用.latest()。所以,你可以得到對象

obj = MyModel.objects.filter(my_integer=77).latest('created_ts') 

您還可以使用.order_by().first()

obj = obj = MyModel.objects.filter(my_integer=77).order_by('-created_ts').first() 
+0

哇。這非常有幫助。謝謝你告訴我關於'.latest()'! –