我正在从多个模型中排序多个查询集。
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
- 属性为整数,Journal
有year
为DateTimeField,Newspaper
有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
问题是我不想将year
- 报纸格式更改为DateTimeField。在这种情况下如何对它们进行排序?
答案 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