我正在过滤多个模型并将它们链接在一起,并按它们的属性对其进行排序。

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/

10-09 06:21