我正在过滤多个模型并将它们链接在一起,并按它们的属性对其进行排序。
bs = Book.objects.filter(books__person=person).order_by('-release_date')
jn = Journal.objects.filter(journals__person=person).order_by('-year')
joined = itertools.chain(x for x in (bs, jn))
sorter = lambda x: x.release_date if hasattr(x,'release_date') else x.year
sorted_medien = sorted(joined, key = sorter, reverse=True)
但它是说:
'QuerySet' object has no attribute 'year'
。这是合理的,因为我将Queryset而不是对象传递给sorter函数。如何更深入地将分类器应用于每个对象?
最佳答案
您正在执行以下操作:
>>> bs, jn = [1, 2], [3, 4]
>>> list(itertools.chain(x for x in [bs, jn]))
[[1, 2], [3, 4]]
您想要做的是:
>>> list(itertools.chain(bs, jn))
[1, 2, 3, 4]
因此,您需要更改
joined = itertools.chain ...
行,如下所示:joined = itertools.chain(bs, jn)
关于python - lambda-“QuerySet”对象没有属性“xxx”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23811024/