繁体   English   中英

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

[英]lambda - can't compare datetime.date to 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 -Attribute为Integer, Journalyear为DateTimeField, Newspaperyear为Integer。

我这样做是为了对它们进行排序:

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

问题是我不想将“报纸”的year格式更改为DateTimeField。 在这种情况下如何分类?

您需要修改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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM