Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python lambda-can';t将datetime.date与int进行比较_Python_Django_Lambda - Fatal编程技术网

Python lambda-can';t将datetime.date与int进行比较

Python lambda-can';t将datetime.date与int进行比较,python,django,lambda,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') 问题是Book的release\u date属性为整数,Journal的

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

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\u date
属性为整数,
Journal
year
属性为datetime字段,
paper
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

问题是我不想把报纸的年格式改成DateTimeField。在这种情况下,如何对它们进行排序

您需要修改
分拣机
功能,并从
日期时间
字段中获取:

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

你可以从
发布日期
中选择
x.release\u date.year
@alecxe将
x.release\u date.year
然后是
整数
?是的,试一试。@alecxe哦,对不起,我写错了描述。图书的发布日期为整数,期刊为日期字段,报纸为整数:(Doiyyor尼斯!只是考虑跟随。你甚至混淆了你自己:)是的,你是对的。错误的名字现在把我搞糊涂了!谢谢兄弟