lambda - 可以将datetime.date与int进行比较

时间:2014-05-22 15:49:21

标签: python django lambda

我正在从多个模型中排序多个查询集。

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为DateTimeField,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

问题是我不想将year - 报纸格式更改为DateTimeField。在这种情况下如何对它们进行排序?

1 个答案:

答案 0 :(得分: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