如何链接Django查询集并按这些查询集的不同字段对结果进行排序

时间:2020-07-03 19:07:26

标签: django sorting django-queryset django-filter

我需要这样做的原因是按相反的时间顺序显示活动线程。我通过将多个对象链接到一个对象然后在一个位置显示来实现这一点。 目前我有:

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)

但是由于“联系人”和“公司”模型没有“ complete_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

1 个答案:

答案 0 :(得分:0)

尝试一下:sort values with None

     #menu-toggle:checked~label i  {    /*Rotates when checked*/
     
         transform: rotate(180deg);
         transition: all ease-in-out .3s
      }

     #menu-toggle:checked:after~label i  {  /*My trial to reach the same reverse rotation when unchecked*/
         transform: rotate(-180deg);
         transition: all ease-in-out .3s
      }