【发布时间】:2020-10-24 12:45:12
【问题描述】:
我需要这个的原因是按时间倒序显示活动线程。我通过将多个对象链接成一个然后在一个地方显示来实现这一点。 目前我有:
contacts = User.contact_created_by.all()
companies = User.company_created_by.all()
tasks = User.tasks_created_by.filter(isComplete=True)
activity = sorted(
chain(contacts, companies, tasks),
key=lambda instance: instance.created_on, reverse=True)
但我需要在结果对象中按“completion_date”而不是“created_on”日期对任务进行排序。
我试过这个用于 lambda 函数:
key=lambda instance: instance.complete_date if (isinstance(instance, Task)) else instance.created_on, reverse=True)
但由于“联系人”和“公司”模型没有“完成日期”字段,因此出现错误。
基本上问题是组合不同的对象并按不同的字段(但相同的类型 - 日期!)对它们进行排序。例如,我进一步计划将“event”对象添加到需要在活动线程中显示的项目中,并带有某种类型的“event_date”。
所以结果将如下所示(按时间倒序排列):
Today:
-event X happened
-contact X created
-task X completed
Yesterday:
-task Y completed
-company X created
The day before yesterday:
-company Y created
【问题讨论】:
标签: django sorting django-queryset django-filter