Python- 如何从对象列表中获取其日期字段具有最新值的对象?

Python- how do I get the object whose date field has the most recent value from a list of objects?

我有一个 Django 应用程序,其中有许多项目。每个项目都可以有多个预算,每次向项目添加新预算时,该项目的现有预算都应该 version_number 增加 1。 'current' 预算应该是 version_number 为 0 的预算 - 所以当试图 'get' 当前预算用于代码中的其他地方时,我正在做这样的事情:

budgetInstance = Budget.objects.get(project = project, version_number = 0)

但是,似乎有些项目以某种方式结束,其中 budgetsversion_number 为 0,因此数据库中的某些项目似乎有几个 'current budgets'...

我知道我需要修正版本控制的逻辑,这样就没有两个 budgets 可以有相同的 version_number,但现在,我只想得到数据库中每个项目的最新 budget

每个Budget对象都有如下属性:project_idversion_numberidpresentation_date

所以我现在想过滤我用 version_number = 0) 过滤时返回的 budgets 他们的 presentation_date 字段。据我了解,我会使用 min() 来执行此操作,但我似乎无法正常工作...

我尝试按照接受的答案进行操作:Find oldest/youngest datetime object in a list,并且 运行 shell 中的以下内容:

mostRecentBudget = min(date for date in budgets.dates if date < now)

但是我得到一个 TypeError,上面写着:

TypeError: 'instancemethod' object is not iterable

这是为什么?如何在给定的 Project 中搜索 Budgets 的列表,以查找具有最新 presentation_date 字段值的列表?

您可以根据 Date[Time]Fields with __lt[e], __gt[e] and date[time] objects. Then, use latest(field_name) 筛选:

from django.utils import timezone

now = timezone.datetime.now()
Budget.objects.filter(
    project=project, version_number=0, 
    presentation_date__lte=now  # p_d less than or equal now
).latest('presentation_date')

不像last, but very much like get, this will raise an ObjectDoesNotExist if the QuerySet是空的。