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)
但是,似乎有些项目以某种方式结束,其中 budgets
的 version_number
为 0,因此数据库中的某些项目似乎有几个 'current budgets'...
我知道我需要修正版本控制的逻辑,这样就没有两个 budgets
可以有相同的 version_number
,但现在,我只想得到数据库中每个项目的最新 budget
。
每个Budget
对象都有如下属性:project_id
、version_number
、id
、presentation_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
是空的。
我有一个 Django 应用程序,其中有许多项目。每个项目都可以有多个预算,每次向项目添加新预算时,该项目的现有预算都应该 version_number
增加 1。 'current' 预算应该是 version_number
为 0 的预算 - 所以当试图 'get' 当前预算用于代码中的其他地方时,我正在做这样的事情:
budgetInstance = Budget.objects.get(project = project, version_number = 0)
但是,似乎有些项目以某种方式结束,其中 budgets
的 version_number
为 0,因此数据库中的某些项目似乎有几个 'current budgets'...
我知道我需要修正版本控制的逻辑,这样就没有两个 budgets
可以有相同的 version_number
,但现在,我只想得到数据库中每个项目的最新 budget
。
每个Budget
对象都有如下属性:project_id
、version_number
、id
、presentation_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
是空的。