lambda - 无法将datetime.date与int比较
我正在对多个模型中的多个查询结果进行排序。
bs = Book.objects.filter(person=person).order_by('-release_date')
jn = Journal.objects.filter(person=person).order_by('-year')
np = Newspaper.objects.filter(person=person).order_by('-year')
问题是,Book
的release_date
属性是整数,Journal
的year
是日期时间格式,而Newspaper
的year
也是整数。
我这样做来进行排序:
joined = itertools.chain(bs, jn, np)
sorter = lambda x: x.release_date if hasattr(x,'release_date') else x.year
latest_pubs = sorted(joined, key = sorter, reverse=True)
但是它显示了:
can't compare datetime.date to int
问题是我不想把Newspaper
的year
格式改成日期时间格式。我该怎么排序呢?
1 个回答
1
你需要修改一下 sorter
这个函数,并从 datetime
字段中提取出 year
(年份):
def sorter(x):
if hasattr(x, 'year'):
if isinstance(x.year, datetime):
return x.year.year
else:
return x.year
else:
return x.release_date