lambda - 无法将datetime.date与int比较

1 投票
1 回答
873 浏览
提问于 2025-04-18 07:19

我正在对多个模型中的多个查询结果进行排序。

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

问题是,Bookrelease_date属性是整数,Journalyear是日期时间格式,而Newspaperyear也是整数。

我这样做来进行排序:

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

问题是我不想把Newspaperyear格式改成日期时间格式。我该怎么排序呢?

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

撰写回答