过滤,然后排序并在queryset上变得与众不同

时间:2019-05-17 14:15:46

标签: python django

我有一个座席列表,我想过滤该列表,然后按他们所写的评论进行排序(如果座席写了评论,那么他应该出现在我列表的顶部)。问题是我得到的名单中相同代理人的3倍,因为他写了3条评论。

我尝试在查询末尾添加与众不同的内容,但出现此错误: NotImplementedError: DISTINCT ON fields is not supported by this database backend

这是我的查询,如果一个代理写了x条评论,则会生成x个代理

agents = Agent.objects.filter(name__icontains=name, metier__name__icontains=metier,
                                          code_uf__icontains=code_uf, grade_code__icontains=grade,
                                          matricule__icontains=matricule).order_by('-comments')

在此处使用不同的查询:

agents = Agent.objects.filter(name__icontains=name, metier__name__icontains=metier,
                                          code_uf__icontains=code_uf, grade_code__icontains=grade,
                                          matricule__icontains=matricule).order_by('-comments').distinct('comments')

我希望得到没有重复代理的列表代理。列表类型应为queryset(因为我之后使用了所有参数)。暂时,我的名单中有3次相同的代理人,因为他写了3条评论...

1 个答案:

答案 0 :(得分:2)

好吧,经过更多的研究,我找到了解决方案。我在此annotate上使用过annotate,然后使用过agents = Agent.objects.filter(name__icontains=name, metier__name__icontains=metier, code_uf__icontains=code_uf, grade_code__icontains=grade, matricule__icontains=matricule).annotate(temp_date=Max("comments__date_created")).order_by("-temp_date")

{{1}}